bob*_*obo 3 block objective-c++ automatic-ref-counting
如果您在 Objective-C 样式块中捕获对 ARC 下的强引用self,则需要使用__weak指针来避免 ARC“保留周期”问题。
// Right way:
- (void)configureBlock {
XYZBlockKeeper * __weak weakSelf = self;
self.block = ^{
[weakSelf doSomething]; // capture the weak reference
// to avoid the reference cycle
}
}
Run Code Online (Sandbox Code Playgroud)
我真的不知道保留周期是什么,但这个答案对此进行了一些描述。我只知道你应该__weak对 Objective-C 风格的块使用指针。请参阅捕获 self 时避免强引用循环。
self但我的问题是,在 C++ 块下捕获时是否需要创建弱指针<functional>?
- (void)configureBlock {
self.block = [self](){
[self doSomething]; // is this ok? It's not an objective C block.
}
}
Run Code Online (Sandbox Code Playgroud)
C++ lambda 可以通过值或引用捕获变量(您在声明 lambda 时选择如何捕获每个变量)。
通过引用捕获并不有趣,因为无论如何,在离开变量的作用域后,对局部变量的引用都会变得无效,因此根本不存在内存管理问题。
按值捕获:如果捕获的变量是 Objective-C 对象指针类型,那么它会变得有趣。如果您使用 MRC,则不会发生任何事情。如果您使用 ARC,那么是的,lambda 会“保留”捕获的对象指针类型的变量,只要它们是__strong(不是__weak或__unsafe_unretained)。所以,是的,它会创建一个保留周期。
| 归档时间: |
|
| 查看次数: |
1989 次 |
| 最近记录: |