这是保留周期吗?

0xS*_*ina 3 cocoa-touch objective-c ios

当我在自己保留的区块中对自己打电话时,我通常会收到警告:

[self.someView doSomething:^{
        self.aVar = @"Hello!";
    }];
Run Code Online (Sandbox Code Playgroud)

我要做:

        __weak SomeObject *weakSelf = self;
[self.someView doSomething:^{
        weakSelf.aVar = @"Hello!";
    }];
Run Code Online (Sandbox Code Playgroud)

但是如果我在weakSelf上调用一个方法,并且该方法使用self,那么即使我没有得到警告,这会导致保留周期吗?我在说这个:

        __weak SomeObject *weakSelf = self;
[self.someView doSomething:^{
        weakSelf.aVar = @"Hello!";
        [weakSelf aMethod];
    }];
Run Code Online (Sandbox Code Playgroud)

和aMethod使用 self

Ste*_*ton 5

只要你weakSelf你的块外声明,没有保留周期.

使用块内的对象会隐式增加保留计数.但你会调用aMethodweakSelf,而不是self,所以保留计数不受影响.