为什么我不能在“独立”块中使用点符号?

时间:2014-08-12 06:08:12

标签: objective-c syntax objective-c-blocks declared-property

关于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
}

那么,为什么规则说点符号不能用?

1 个答案:

答案 0 :(得分:0)

这句话似乎是不正确的,虽然他们可能试图克服你不应该在独立的块中使用self。在你给出的例子中可以没问题,但是当块被保留在其他地方时会出现问题。

如果在块内引用self,它会保留对它的强引用,如果块内部有引用,则自我' (无论是什么样的自己)然后你会有一个保留周期和内存泄漏,因为它们无法清理它们,因为它们仍然有很强的相互引用。

你可以通过声明一个指向弱自我的变量

来解决这个问题
__weak <#TypeOfSelf#> weakSelf = self; //use weakSelf in your block