在Objective-C中按块进行变量捕获的规则
发布时间:2020-12-16 03:36:32 所属栏目:百科 来源:网络整理
导读:在Objective-C中通过块捕获变量的语义是什么? #import Foundation/Foundation.h#include stdio.hint main(){ NSMutableArray *arr = [NSMutableArray array]; for (int i = 0; i 100; ++i) { int j = i; [arr addObject:^(void) {printf("%d %dn",i,j); }]
在Objective-C中通过块捕获变量的语义是什么?
#import <Foundation/Foundation.h> #include <stdio.h> int main() { NSMutableArray *arr = [NSMutableArray array]; for (int i = 0; i < 100; ++i) { int j = i; [arr addObject:^(void) {printf("%d %dn",i,j); }]; } for (void (^blk)(void) in arr) { blk(); } } 我正在考虑打印这样的东西: 100 0 100 1 ... 100 99 相反,它打印: 99 99 99 99 ... 99 99 怎么可能将j解释为等于99? j在for循环之外甚至不活着. 解决方法
因为你没有使用ARC!没有它,您的块不会被复制.你很幸运,每次都跑到最后一个街区.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |