Objective-C委托指针
如果我们编写以下代码:Objective-C委托指针,objective-c,Objective C,如果我们编写以下代码: ExplorerAppDelegate * appDelegate = (ExplorerAppDelegate *)[[UIApplication sharedApplication] delegate]; 这将引用原始委托指针,但: 它会增加引用计数吗 我们必须立即显式地调用as[ExplorerAppDelegate retain],还是根本不调用 到底发生了什么事 使用此方法后,我们还应该在dealloc方法中执行[ExplorerAppDelegate r
ExplorerAppDelegate * appDelegate = (ExplorerAppDelegate *)[[UIApplication sharedApplication] delegate];
这将引用原始委托指针,但:
- 它会增加引用计数吗李>
- 我们必须立即显式地调用as
,还是根本不调用李>[ExplorerAppDelegate retain]
- 到底发生了什么事
[ExplorerAppDelegate release]
,对吗
因此,基本上,如果只在单个函数中使用对象,则可能不需要保留或释放它。如果在您获得它时它就存在,那么(可能)在函数结束时它不会被释放。如果要保留它,例如在ivar(成员变量)中,则应保留它并在以后释放。否,它不会增加保留计数 Objective-C中的约定是,给你的对象应该是由你自己管理的内存-但是在获得像应用程序委托这样的共享公共资源的情况下,内存在别处维护,当然(这就是应用程序委托),你知道只要你的类是。。。因此,没有必要保留引用 在委托的大多数使用中,不是获取委托,而是获得一个委托,并且该引用也不会保留。在这种情况下,无论是谁给了您该委托,都会响应在该委托被释放之前清除委托链接的请求
通常不希望保留委托引用的原因是,它可以防止某些对象被释放,例如,如果一个类是将另一个类用作委托的类的委托。有关正式答案,请参阅中的“对对象的弱引用”。指向委托的指针是内存管理规则可能出现的异常情况之一。这些都是有效的,而且完全正确。但是由于应用程序委托是在应用程序启动时创建的,并且永远不会释放(至少在终止之前不会释放),因此您可以简单地保留引用,而不是保留它,并完全忽略该问题。在这种情况下,您知道引用将在应用程序的生命周期内保持有效。