Установка экземпляра AppDelegate Shared на nil не создает предупреждения или сбоя

В моем приложении я сделал что-то вроде этого,

 AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
 //some code
 appDelegate = nil;

Но приложение работает нормально и не выдает предупреждений или сбоев.

Кто-нибудь может это объяснить? Спасибо.


person Meet    schedule 17.06.2013    source источник


Ответы (4)


Сначала вы указали appDelegate на [[UIApplication sharedApplication] delegate]. Тогда вы указали в никуда. Но [[UIApplication sharedApplication] delegate] остается прежним. Вы ничего не сделали с ним. Ты даже не прикоснулся к нему.

То, о чем вы, вероятно, думаете, это:

 [[UIApplication sharedApplication] setDelegate:nil];

Но это также не должно вызывать предупреждений или сбоев. Это должно привести только к тому, что методы делегата приложения не будут вызываться, поскольку сообщения, отправленные на nil, ничего не делают.

person Andrey Chernukha    schedule 17.06.2013

[[UIApplication sharedApplication] delegate] даст вам указатель на ваш делегат приложения, который был автоматически создан при создании проекта. Таким образом, установка appDelegate = nil просто устанавливает указатель на делегат приложения в nil. Ничего не делает с делегатом приложения, который создается автоматически.

person lakesh    schedule 17.06.2013

 AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];

Используя эту строку, он возвращает вам общий экземпляр appDelegate.

[UIApplication sharedApplication] --- дает доступ к синглтону

delegate возвращает указатель на делегат приложения. и когда вы назначаете nil для appDelegate после завершения всех работ. Почему он рухнет? Возможно, если вы попытаетесь вызвать метод после присвоения ему нулевого значения. Это не будет работать.

person Divyu    schedule 17.06.2013

Вы устанавливаете указатель appDelegate на nil, а не на делегат приложения. После того, как вы напишете этот код, [[UIApplication sharedApplication] delegate] все равно не будет nil.

person Levi    schedule 17.06.2013