类的实例方法是否可以自行释放?
即要有一个调用方法:
[self release]
假设我的代码在调用[self release]
后不会访问self答案 0 :(得分:1)
答案 1 :(得分:1)
虽然我怀疑你发布后会立即移动内存,但请记住,[自我发布]所在的代码位于对象内部的内存块中。因此,有可能在从[self release]返回之后,最终会出现不再分配的代码,并且正在被其他进程写入。不能确定这是多么可能,但似乎有可能。
答案 2 :(得分:1)
我曾经使用过这种技术,类似的情况(来自Web委托的独立对象处理响应可能比启动请求的视图更长)。
它确实有效,但实际上做起来确实相当棘手。从那时起,我发现在NSOperationQueue中使用NSOperations是一种更加可靠且易于理解的方法,用于封装独立于请求者运行的后台操作。通常在执行操作时,会在主线程上发出通知,通知任何调用者可能仍然存在,该数据已准备好接收。
对于简单的远程请求,您可以在操作中使用更简单的同步URL调用,因为它们在单独的线程中运行,并且在数据传入时不会阻塞主线程(例如,从URL获取小图像时很方便)。
答案 3 :(得分:1)
类的实例方法是否可以自行释放?
即要有一个调用方法:
[自我释放]
假设我的代码在调用[self release]
后不会访问self
首先,我希望有一个非常好的理由来释放自己。我唯一一次完成它是在一个单独的转储,以释放iPhone上的大块内存。这是一个罕见的事件。
您的代码是类对象的一部分。因此,调用[自我释放]并不是一个真正的问题。当然,从封装的角度来看,如果你调用[self autorelease],你会更安全。至少那时,如果调用链中有人调用您的方法,则不会导致异常。
安德鲁
答案 4 :(得分:0)
你可以做到。有用。这有点危险,特别是因为优化编译器可以以您不想要的方式重新排列代码。
更安全的是调用[self autorelease],它将在不久的将来某个时刻释放当前对象(下一次通过runloop),而不是立即释放。