如果您self
在 Objective-C 样式块中捕获对 ARC 下的强引用,则需要使用__weak
指针来避免 ARC“保留循环”问题。
// Right way:
- (void)configureBlock {
XYZBlockKeeper * __weak weakSelf = self;
self.block = ^{
[weakSelf doSomething]; // capture the weak reference
// to avoid the reference cycle
}
}
我真的不知道保留周期是什么,但这个答案描述了一点。我只知道您应该为 Objective-C 样式块使用__weak
指针。请参阅在捕获 self 时避免强引用循环。
但我的问题是,self
在 C++<functional>
块下捕获时是否需要创建弱指针?
- (void)configureBlock {
self.block = [self](){
[self doSomething]; // is this ok? It's not an objective C block.
}
}