在修复第三方代码时,我发现了一个非常棒的想法)Guy在项目xib中使用了2个appDelegate对象。我认为他认为这将是某种单调或类似的东西。但在重新思考这段代码之后,我发现它没有技术限制。 这是我的例子:带navController的简单项目和2个视图。每个都有它的viewController。当应用程序启动时,第一个视图在屏幕上。当用户点击按钮时,第二个视图被推送到navController。目前在MainWindow.xib中有appDelegate对象。现在,如果你将同一个appDelegate对象添加到第二个视图的xib。现在,当推送第二个视图时,您可以看到创建并销毁了另一个appDelegate实例(如果您将覆盖init和dealloc方法并在那里插入日志)。 在这里,我很惊讶。这是否意味着只能创建一个appDelegte实例?如果是,那为什么呢? appDelegate只是一个实现UIApplicationDelegate协议的NSObject子类。
答案 0 :(得分:0)
xCode在每个iphone项目上创建的appDelegate对象是应用程序的入口和出口点。如果您(除了可能丢失某些应用程序设置)应用程序委托给哪个类,它不会有这个类的多个实例?为什么你只能制作一个?最有可能的原因是这个类在封面下实现了一个Singleton模式,所以确保只有一个app委托实例,我敢打赌,即使你试图分配另一个这样的实例,原始的app代理也是唯一保留的。您可以浏览文档并在http://developer.apple.com/iphone
上找到关于苹果网站的更多信息答案 1 :(得分:0)
UIApplicationDelegate是一个协议,本身没有状态,因此没有任何东西阻止你拥有它们中的几个。与具有状态和状态的UIApplication相比 提供sharedApplication单例访问器
应该完全可以动态替换UIApplication的委托属性。但是,我没有看到太多的好处。
答案 2 :(得分:0)
我认为这里发生的事情是第二个Nib中有一个AppDelegate类的实例,但没有其他对象保留它。因此它会被创建并立即释放。如果您将保留属性添加到连接到AppDelegate的视图控制器,则它不会立即释放。
您可以拥有多个实现UIApplicationDelegate协议的对象,但通常不会这样做,因为90%的行为在所有情况下都是相同的。
答案 3 :(得分:0)
我认为你可以沿着这些方向做点什么:
UIApplication.delegate
。UIApplicationDelegate
的实例。- (id)forwardingTargetForSelector:(SEL)aSelector
方法返回旧代表。[UIApplication sharedApplication].delegate
替换。它用你的原始app委托代替,确保仍然会调用旧的委托,特别是如果你没有覆盖UIApplicationDelegate
协议定义的每个方法。