关于Objective-c块,我正在阅读的文件说:
您无法在独立块对象中引用
self
。如果需要,您必须将self
对象作为参数传递给块。使用点表示法无法访问独立块内对象的属性。如果需要,请使用setter和getter方法。
但我可以编写以下内容,并按预期运行。
- (void)testing
{
self.name = @"wahaha";
void (^independentBlock)(NSString *arg) = ^(NSString *arg){
self.name = @"";
NSLog(@"%@ -- %@",arg, self.name);
};
a(@"abcd"); // abcd -- wahaha
}
那么,为什么规则说点符号不能用?
答案 0 :(得分:0)
这句话似乎是不正确的,虽然他们可能试图克服你不应该在独立的块中使用self。在你给出的例子中可以没问题,但是当块被保留在其他地方时会出现问题。
如果在块内引用self,它会保留对它的强引用,如果块内部有引用,则自我' (无论是什么样的自己)然后你会有一个保留周期和内存泄漏,因为它们无法清理它们,因为它们仍然有很强的相互引用。
你可以通过声明一个指向弱自我的变量
来解决这个问题__weak <#TypeOfSelf#> weakSelf = self; //use weakSelf in your block