Я недавно боролся с этим, и похоже, что ни убийство процесса Dock, ни процесс SystemUIServer сами по себе не сделали этого; Я должен был убить их обоих.
Вернуться к документации Apple по этому вопросу:
Когда ваше приложение удаляется из Dock, метод setDockTile: вызывается с параметром nil. Ваш setDockTile: метод должен освободить объект плитки Dock, очистить все ресурсы, выделенные подключаемым модулем Dock Tile, и завершиться.
Я обнаружил, что если вы буквально берете «и выходите» из документов Apple, эти плагины не задерживаются и выгрузка чистая. Хотя я чувствую себя немного грязно, когда делаю это (и отправляю отзыв об этом в Apple), потому что я считаю, что мой выход (0) вызывает перезагрузку подключаемых модулей других приложений. (Я думаю, что нужно прибегнуть к killall Dock / SystemUIServer делает то же самое)
Документы тоже кажутся неоднозначными ... Не уверен, почему Apple хотела бы, чтобы вы занимались хорошими средствами управления памятью и освобождали объекты, когда следующее, что вы делаете, это убивает процесс.
if(dockTile == nil) {
NSLog(@"Docktile version %@ unloading", [[[NSBundle bundleForClass:[self class]] infoDictionary] valueForKey:@"CFBundleVersion"]);
[_dockTile release], _dockTile = nil; // don't leak memory!
exit(0); // ouch
}