可能重复:
Is Block_copy recursive?
我不确定块如何保留块。
int i = 0;
void(^stackBlock)(void) = ^(void) {
(void)i; //use local variable 'i'
};
NSLog(@"%@", stackBlock);
void(^completionHandler)(void) = ^(void) {
stackBlock();
};
[something doSomethingWithCompletionHandler:completionHandler];
stackBlock是__NSStackBlock__
,这意味着保留它是无用的。
doSomethingWithCompletionHandle:
将复制completionHandler,并在从互联网下载一些数据后再调用它。
我的问题是示例代码安全吗?
因为我知道retain __NSStackBlock__
没用,所以stackBlock
将不会被保留(应该使用copy),然后在范围之外调用它是不安全的。