Objective-C模块和变量
我今天开始使用Objective-C块。我编写了以下代码:Objective-C模块和变量,objective-c,variables,objective-c-blocks,Objective C,Variables,Objective C Blocks,我今天开始使用Objective-C块。我编写了以下代码: NSArray *array = @[@25, @"abc", @7.2]; void (^print)(NSUInteger index) = ^(NSUInteger index) { NSLog(@"%@", array[index]); }; for (int n = 0; n < 3; n++) print(n); NSArray *array; void (^print)(NSUInteger
NSArray *array = @[@25, @"abc", @7.2];
void (^print)(NSUInteger index) = ^(NSUInteger index)
{
NSLog(@"%@", array[index]);
};
for (int n = 0; n < 3; n++)
print(n);
NSArray *array;
void (^print)(NSUInteger index) = ^(NSUInteger index)
{
NSLog(@"%@", array[index]);
};
array = @[@25, @"abc", @7.2];
for (int n = 0; n < 3; n++)
print(n);
然而,这是行不通的。控制台只打印三次
(空)
。为什么这不起作用,而我的第一段代码却起作用了?这是因为块在创建块时按值捕获变量(除非使用\u block
)
您可能想要的是:
NSArray *array = @[@25, @"abc", @7.2];
void (^print)(NSUInteger index) = ^(NSUInteger index)
{
NSLog(@"%@", array[index]);
};
for (int n = 0; n < 3; n++)
print(n);
请注意,如果实际上不需要修改块内的变量并将其反映到块外,则使用
\uu块的效率会稍低。块在创建时捕获数组
指针。您可以添加\u块
修改器,使块通过引用捕获指针,但这通常成本较高,不推荐使用。最好在数据准备好在块内使用后创建捕获块。使用_块有什么区别?_块
告诉编译器通过引用捕获变量,以便您可以在块内修改它,并在块外显示新值。(我将添加一个带有_block的示例。)_block
通过引用捕获变量。编辑:两次都被打败。:)谢谢,用\u block
帮我完成了。实际上,我需要修改块中的变量,现在可以正常工作了。:)我试着用这段代码修改块内的变量,但打印三个空值,知道吗__块NSMUTABLEARRY*数组;void(^print)(NSUInteger索引)=^(NSUInteger索引){[array addObject:@“444”];NSLog(@“%@”,array[index]);};[数组addObject:@“111”];[数组addObject:@“222”];[数组addObject:@“333”];对于(int n=0;n<3;n++)打印(n);有意思你有没有举个例子?
__block NSArray *array;
void (^print)(NSUInteger index) = ^(NSUInteger index)
{
NSLog(@"%@", array[index]);
};
array = @[@25, @"abc", @7.2];
for (int n = 0; n < 3; n++)
print(n);