是否允许调用[self release]来控制对象的生命周期?

Phi*_*ert 19 iphone objective-c

我想在Objective C中创建一个对象,但我没有对它的引用.

是否允许通过调用[self release]让对象控制自己的生命周期?

如果你想知道为什么我需要这个:我想创建一个订阅某些通知的对象,但过了一段时间后不再需要该对象并且应该消失.

那么,允许以下内容吗?

- (void) destroyMyself {
   [[NSNotificationCenter defaultCenter] removeObserver:self];

   [self release];
} 
Run Code Online (Sandbox Code Playgroud)

Jac*_*cob 18

如果你在代码中看到这个,它可能是错误的.但是,在某些可以说是可辩护的情况下,它会有合理的回应.(因此,请确保您出于正确的原因这样做.)

有意义的一个很好的例子是,当你创建一个下载url的对象时.下载URL时,该对象位于内存中,然后向其代理发送消息,说明数据已准备就绪(或无法下载URL).一旦它的消息被发送,它就会破坏它自己,因为它不再需要它.在这种情况下,创建"url downloader"的代码/函数可能不再存在于内存中,即,如果响应用户选择调用菜单项或视图控制器中不再在屏幕上的操作而调用它.

当创建"下载"对象的代码不关心下载是否完成时,这很有用.


Jer*_*myP 9

规则很简单.如果您拥有对象,则应该只释放它.即,使用以"new"或"alloc"开头的方法或包含副本的方法获得对象.

可可内存管理规则

因此,除非事先已经[自我保留],否则对象不得进行[自我释放]或[自我自动释放].