Почему NSNotificationCenter выдает исключение при его освобождении? - PullRequest
0 голосов
/ 21 июня 2010

Это не столько вопрос, сколько размышление - почему NSNotificationCenter выдает исключение при выпуске? Я все еще новичок в разработке для iPhone и, таким образом, пока не знаю внутренности какао, поэтому было бы хорошо понять, почему.

Я присваиваю defaultCenter переменной, вызываю addObserver: selector: name: object и затем освобождаю предыдущую переменную, но вызываю [notify release ] вылетает приложение. Я не делаю ничего странного в коде, поэтому было бы интересно узнать, почему именно это происходит.

Кто-нибудь сталкивался с этой проблемой?

Ответы [ 4 ]

5 голосов
/ 21 июня 2010

Из того, что я знаю о NSNotifcation, вы не должны назначать defaultcenter переменной, а делать что-то вроде:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showLogin) name:@"IncorrectLogin" object:nil];

В этом фрагменте вы вызываете центр по умолчанию и регистрируете текущий объект для определенного сообщения.

А затем, чтобы отправить сообщение в центр уведомлений, вы можете использовать:

[[NSNotificationCenter defaultCenter] postNotificationName:@"IncorrectLogin" object:nil];

Я использую вышеупомянутое во всем своем коде и не имею никаких проблем с ним.

2 голосов
/ 21 июня 2010

Для вашего приложения должен быть только один центр уведомлений по умолчанию, поэтому ни один из ваших классов не должен сохранять или выпускать его.Вы бы не хотели, чтобы ваш центр уведомлений исчез на вас, верно?

1 голос
/ 21 июня 2010

Я не думаю, что вы владеете объектом, и поэтому не должны освобождать его.

Запомните NARC: новый Alloc, Retain, Copy. Если вы сделаете один из них, вы должны отпустить его.

0 голосов
/ 21 июня 2010

Это не твое освобождение.

Помните правило NARC - вы ТОЛЬКО выпускаете вещи, которые вы создали, используя:

Новый ассигновать Сохранить или Копировать.

NARC. См

Что вы делаете с NSNotificationCenter, так это то, что вы получаете копию одиночного файла, представляющего центр уведомлений по умолчанию. Стоит почитать об одиночках.

...