当我在自己保留的区块中对自己打电话时,我通常会收到警告: [self.someView doSomething:^{ self.aVar = @"Hello!"; }]; 我要做: __weak SomeObject *weakSelf = self;[self.someView doSomething:^{ weakSelf.aVar = @"Hell
[self.someView doSomething:^{ self.aVar = @"Hello!"; }];
我要做:
__weak SomeObject *weakSelf = self; [self.someView doSomething:^{ weakSelf.aVar = @"Hello!"; }];
但是如果我在weakSelf上调用一个方法,并且该方法使用self,那么即使我没有得到警告,这会导致保留周期吗?我在说这个:
__weak SomeObject *weakSelf = self; [self.someView doSomething:^{ weakSelf.aVar = @"Hello!"; [weakSelf aMethod]; }];
和aMethod使用自我
只要你的weakSelf是 declared outside your block,就没有保留周期.使用块内的对象会隐式增加保留计数.但是你要在weakSelf而不是self上调用一个方法,所以保留计数不受影响.