在修复第三方代码时,我发现了一个非常好的主意)Guy在项目xib中使用了2个appDelegate对象。我认为他认为这会是某种单人或其他类似的东西。但是在重新思考那段代码之后,我发现它没有技术限制。 这里是我的例子:带navController和2个视图的简单项目。每个都有它的viewController。当应用程序启动时,第一个视图在屏幕上。当用户点击按钮时,第二个视图被推送到navController。现在在MainWindow.xib中有appDelegate对象。现在,如果您将添加与第二个视图的xib相同的appDelegate对象。现在,当第二个视图被推送时,你可以看到另外一个appDelegate实例被创建和销毁(如果你将覆盖init和dealloc方法并在那里插入日志)。 这里我很惊讶。这是否意味着只能创建一个appDelegte实例?如果是,那为什么? appDelegate只是一个实现UIApplicationDelegate协议的NSObject子类。超过1个appDelegate对象?
2
A
回答
0
通过Xcode的每个iPhone项目创建的appDelegate对象是应用程序的入口和出口点。如果你这样做(除了可能丢失了一些应用程序设置),那么它不会让这个类有多个实例,这个应用程序委派了哪个类?你为什么只能做一个?很可能这是因为这个类正在实现一个Singleton模式,因此确保只有一个应用程序委托实例被创建,我敢打赌,即使您尝试分配另一个这样的实例,原始应用程序委托也是唯一保留的实例。你也许可以挖过来的文档,并在http://developer.apple.com/iphone
0
UIApplicationDelegate找到关于苹果网站的详细信息是一个协议,没有在自己的状态,所以没有什么阻止你有几个人。将其与具有状态的UIApplication进行对比,并且 提供共享应用程序单例访问器
应该完全有可能立即替换UIApplication的委托属性。虽然我看不到太多的好处。
0
我觉得这里发生了什么是有第二笔尖AppDelegate类的一个实例,但没有其他对象保留它。因此它被创建并立即释放。如果您向连接到AppDelegate的视图控制器添加了保留属性,那么它将不会立即发布。
您可以都实现了UIApplicationDelegate协议的多个对象,但它通常不这样做,因为90%的行为是在所有情况下是相同的。
0
我觉得你可以做下面几行内容:
- 注意老
UIApplication.delegate
。 - 使用旧委托作为参数创建
UIApplicationDelegate
的实例。 - 确保在实施的每种方法中调用旧委托。
- 使其在
- (id)forwardingTargetForSelector:(SEL)aSelector
方法返回旧委托。 - 用你的替换
[UIApplication sharedApplication].delegate
。
它取代了原来的应用程序委托你,确保老代表将仍然被调用,特别是如果你没有覆盖每一个方法的UIApplicationDelegate
协议定义。
相关问题
- 1. 每表超过1个对象类型
- 2. java同步块的超过1个对象?
- 3. ebean查询不匹配超过1个对象
- 4. 回声超过1个ID
- 5. maven超过1个settings.xml
- 6. appdelegate在xib中的对象
- 7. 超过1
- 8. Parse现在是否支持每个对象超过1个地理点?
- 9. memcache中找到得罪的对象(超过1 MB限制)
- 10. 使用“with”的文件对象超过1次
- 11. navigator.vibrate超过1次
- 12. Django - 过滤超过X天的对象
- 13. JQuery Mobile DateBox - 超过1个实例
- 14. 路由器canActivate超过1个卫
- 15. 超过1个值到行使用bash
- 16. D3转换超过1个svg元素
- 17. java中的超过1个问号
- 18. php.ini中有超过1个session.cookie_domain
- 19. jquery没有超过1个函数
- 20. 更换超过1个实例与PHP
- 21. 如果我有超过1个包装
- 22. Google autocomplete限制超过1个国家
- 23. 子查询返回超过1个
- 24. C程序数组超过1个字
- 25. 类的AppDelegate主题1:SIGABRT
- 26. 初始化xcode 8中的Appdelegate对象
- 27. 从AppDelegate注入对象到UIViewController
- 28. CoreData(存储新对象)在AppDelegate = SIGABRT
- 29. Xcode Cocos2d无法创建AppDelegate对象
- 30. 如何将FBGraphUser对象传递给appDelegate