在从块调用的方法中使用ivar

时间:2017-12-06 22:08:01

标签: objective-c

我想在一个从块中调用的方法中使用ivar。可以直接从它调用ivar而不会导致保留周期吗? 我已经看到了与调用房产相关的其他问题 - 说我们可以'用自己。只是想确定ivars,我们可以直接调用ivar还是我们需要明确使用 self-> _myInstanceVariable

__weak MyClassName *weakSelf = self;
[MyBlockCreator myBlock:^{ 
   MyClassName *strongSelf = weakSelf;
   [strongSelf doSomething];
}];

- (void) doSomething {
   _myInstanceVariable = someObject

   // is it fine to use the ivar directly above? 
   // or do we want use self explicitly? 
   // like self->_myInstanceVariable
}

1 个答案:

答案 0 :(得分:0)

在这种情况下,您根本不需要使引用弱/强,唯一可以导致保留周期的情况是self引用块和{{1的强版本在该块中捕获。由于self未保留相关块,因此即使使用强引用也不会有保留周期。

self

[Foo doWithBlock:^{ bar.baz = @"Hello World"; // Totally fine without weak/strong since bar doesn't retain the block here. }]; 拥有对块的强引用且块引用self的情况下,您需要在块外部使引用变弱,然后再将其强化为内部。

self