#objective-c #macos #cocoa #launchd #nsworkspace
#objective-c #macos #cocoa #launchd #nsworkspace
Вопрос:
Я хочу использовать NSWorkspace, чтобы проверить, запущено или закрыто приложение.
Но процесс — это демон запуска, и в документации Apple говорится, что он не потокобезопасен.
Однако часть кода, которая использует Workspace, не будет выполняться при запуске или входе в систему. Он будет выполнен после некоторых команд, полученных от другого приложения через BSD-связь, и процесс является фоновым процессом без пользовательского интерфейса?
Безопасно ли использовать фреймворк Appkit в этой ситуации? Только API NSWorkspace и никакой другой? Альтернативным решением является опрос? Каково ваше предложение?
Ответ №1:
Как правило, вы можете использовать любой код, который не является потокобезопасным, при условии, что вы выполняете только одну операцию, независимо от того, является ли операция unthreadafe в любой момент времени. Я бы пошел дальше и попробовал это, и просто имейте в виду, что все, что вы делаете, вы не можете делать одновременно, если вам абсолютно необходимо что-то делать одновременно, вы можете попробовать добавить пару блоков @synchronized вокруг кода, либо в обратных вызовах длительного фонового процесса, либо в вызовах делегирования.