Центр уведомлений NSWorkspace не отправляет уведомления при сборке мусора

Я не уверен, что я делаю что-то неправильно здесь:

Я регистрируюсь для получения уведомлений Workspace, используя этот фрагмент в awakeFromNib

[[[NSWorkspace sharedWorkspace] notificationCenter] 
    addObserver:self 
       selector:@selector(noteReceived:) 
           name:nil 
         object:nil];

селектор noteReceived: принимает один NSNotification * в качестве параметра. И у меня есть точка останова на нем.

При компиляции с выключенным сборщиком мусора все работает нормально, и я получаю все уведомления.

Когда GC включен, я получаю только одно уведомление, когда мое приложение запускается, и все.

Я что-то упускаю?

Решение:

Я что-то упустил. Это был просто быстрый тестовый проект, поэтому не было обычного соединения между контроллерами, которое было бы в реальном приложении. Недостаточно создать экземпляр объекта в файле nib/xib и ожидать, что он не будет собран.

Как только я сделал свой контроллер делегатом владельца файла (хотя он не реализует никаких методов делегата), этого было достаточно, чтобы объект оставался живым.


person Abizern    schedule 15.03.2009    source источник


Ответы (1)


В GC NSNotificationCenter поддерживает только слабую ссылку на ваш объект наблюдения. По этой причине убедитесь, что ваш объект наблюдения находится где-то в иерархии объектов.

person Ashley Clark    schedule 16.03.2009
comment
Спасибо, это помогло мне найти решение. - person Abizern; 16.03.2009