0

以下代码存在内存管理问题:

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];
            });

似乎在块释放对象后自动释放池被排空,但我不确定这是保证,所以我不知道这段代码是否有效。

4

1 回答 1

0

实现该方法的-dealloc应该对. 在这种情况下,您不必担心。如果被引用的对象首先被释放,那么当你访问它时就会被释放,这是安全的。_objectA_objectA_objectAnil

于 2013-03-16T04:59:40.807 回答