gpt4 book ai didi

objective-c - objective-C中 block 捕获变量的规则

转载 作者:太空狗 更新时间:2023-10-30 03:41:29 24 4
gpt4 key购买 nike

在 Objective-C 中通过 block 捕获变量的语义是什么?

#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 %d\n", i, j); }];
}
for (void (^blk)(void) in arr) {
blk();
}
}

我期待着打印出类似这样的东西:

100 0
100 1
...
100 99

相反,它打印:

99 99
99 99
...
99 99

它怎么可能将 j 解释为等于 99j 甚至在 for 循环之外都不存在。

最佳答案

因为你没有使用 ARC!没有它,您的 block 不会被复制。你只是运气好,每次都运行最后一个 block 。

关于objective-c - objective-C中 block 捕获变量的规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37174828/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com