以下代码存在内存管理问题:
dispatch_after(someTime, dispatch_get_main_queue(), ^(void){
[objectA doSomething];
[self doSomethingDifferent];
});
//self’s dealloc:
- (void)dealloc
{
_objectA.delgate = nil; //objectA’s delegate is this object;
[super dealloc]
}
“self”引用了objectA,但没有保留objectA。在 self 的 dealloc 中,它触及 objectA。如果 objectA 已被释放,这将是一个问题。我知道通过在块中引用这些对象,它们将被保留,但我不确定是否有办法确定它们将以什么顺序被释放。
似乎有效的一件事是:
dispatch_after(someTime, dispatch_get_main_queue(), ^(void){
[[objectA retain] autorelease];
[objectA doSomething];
[self doSomethingDifferent];
});
似乎在块释放对象后自动释放池被排空,但我不确定这是保证,所以我不知道这段代码是否有效。