加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在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!没有它,您的块不会被复制.你很幸运,每次都跑到最后一个街区.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读