我想在一个从块中调用的方法中使用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
}
答案 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