以下代码存在内存管理问题:
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。在自我的dealloc中,它触及objectA。如果objectA已被解除分配,则会出现此问题。我知道通过在块中引用这些对象,它们将被保留,但我不确定无论如何都要确定它们将以何种顺序发布。
似乎有用的一件事是:
dispatch_after(someTime, dispatch_get_main_queue(), ^(void){
[[objectA retain] autorelease];
[objectA doSomething];
[self doSomethingDifferent];
});
似乎在块释放对象后,自动释放池被耗尽,但我不确定这是保证,所以我不知道这段代码是否有效。
答案 0 :(得分:0)
实施-dealloc
方法的类应该包含对_objectA
的归零弱引用。在这种情况下,您不必担心它。如果_objectA
引用的对象首先被取消分配,那么当您访问它时_objectA
将为nil
,这是安全的。