Использование фреймворка Appkit в демоне запуска

#objective-c #macos #cocoa #launchd #nsworkspace

#objective-c #macos #cocoa #launchd #nsworkspace

Вопрос:

Я хочу использовать NSWorkspace, чтобы проверить, запущено или закрыто приложение.

Но процесс — это демон запуска, и в документации Apple говорится, что он не потокобезопасен.

Однако часть кода, которая использует Workspace, не будет выполняться при запуске или входе в систему. Он будет выполнен после некоторых команд, полученных от другого приложения через BSD-связь, и процесс является фоновым процессом без пользовательского интерфейса?

Безопасно ли использовать фреймворк Appkit в этой ситуации? Только API NSWorkspace и никакой другой? Альтернативным решением является опрос? Каково ваше предложение?

Ответ №1:

Как правило, вы можете использовать любой код, который не является потокобезопасным, при условии, что вы выполняете только одну операцию, независимо от того, является ли операция unthreadafe в любой момент времени. Я бы пошел дальше и попробовал это, и просто имейте в виду, что все, что вы делаете, вы не можете делать одновременно, если вам абсолютно необходимо что-то делать одновременно, вы можете попробовать добавить пару блоков @synchronized вокруг кода, либо в обратных вызовах длительного фонового процесса, либо в вызовах делегирования.