自我保留在这个Objective-C块中吗?

时间:2011-06-22 01:05:40

标签: iphone objective-c objective-c-blocks

当我在Objective-C中有一个看起来像这样的块时:

self.request = [[ASIHTTPRequest requestWithURL:...

[self.longPollRequest setCompletionBlock:^{
    NSLog(@"%@", self.request.responseString);
}];

是保留self还是明确保留self.request

1 个答案:

答案 0 :(得分:8)

正如Block Programming Topics所说:

  

在参考计数环境中,通过   引用时默认值   它中的Objective-C对象   保留。即使你这样也是如此   只需引用一个实例变量   对象。标记了对象变量   使用__block存储类型   但是,修饰语不会被保留。

     

如果你在一个方法的实现中使用一个块,那么规则   用于对象的内存管理   实例变量更加微妙:

     

如果通过引用访问实例变量,则self为   保留;

     

如果您通过访问实例变量   值,保留变量。

您在块中引用self,因此会保留self