【发布时间】:2013-06-13 10:30:42
【问题描述】:
在我的应用程序中,我做了这样的事情,
AppDelegate *appDelegate = [[UIApplication sharedApplication] 委托]; //一些代码 appDelegate = nil;但是,App 运行良好,没有给出警告或崩溃。
谁能解释一下? 谢谢。
【问题讨论】:
在我的应用程序中,我做了这样的事情,
AppDelegate *appDelegate = [[UIApplication sharedApplication] 委托]; //一些代码 appDelegate = nil;但是,App 运行良好,没有给出警告或崩溃。
谁能解释一下? 谢谢。
【问题讨论】:
您将appDelegate 指针设置为nil 而不是应用程序的委托。编写此代码后,[[UIApplication sharedApplication] delegate] 仍然不是nil。
【讨论】:
首先你让appDelegate 指向[[UIApplication sharedApplication] delegate]。然后你让它指向无处。但是[[UIApplication sharedApplication] delegate] 保持不变。你什么也没做。你甚至没有碰它。
你可能想到的是:
[[UIApplication sharedApplication] setDelegate:nil];
但它也不应该产生警告或崩溃。它只会导致不调用应用程序委托方法,因为发送给 nil 的消息什么都不做。
【讨论】:
[[UIApplication sharedApplication] delegate] 会给你一个指向你的应用程序委托的指针,它是在你创建项目时自动创建的。所以设置 appDelegate = nil,只是将指向应用程序委托的指针设置为 nil。对自动创建的应用委托不做任何事情..
【讨论】:
AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
使用这一行,它会返回一个 appDelegate 的共享实例。
[UIApplication sharedApplication] --- 允许访问单例
delegate 方法返回一个指向应用委托的指针。
当您在完成所有工作后将 nil 分配给 appDelegate 时。为什么会崩溃?
如果您在分配 nil 值后尝试调用方法,则可能是这样。那是行不通的。
【讨论】: