当我在Objective-C中有一个看起来像这样的块时:
self.request = [[ASIHTTPRequest requestWithURL:...
[self.longPollRequest setCompletionBlock:^{
NSLog(@"%@", self.request.responseString);
}];
是保留self
还是明确保留self.request
?
答案 0 :(得分:8)
在参考计数环境中,通过 引用时默认值 它中的Objective-C对象 保留。即使你这样也是如此 只需引用一个实例变量 对象。标记了对象变量 使用__block存储类型 但是,修饰语不会被保留。
如果你在一个方法的实现中使用一个块,那么规则 用于对象的内存管理 实例变量更加微妙:
如果通过引用访问实例变量,则self为 保留;
如果您通过访问实例变量 值,保留变量。
您在块中引用self
,因此会保留self
。