我试图了解块的基本原理。我写了这个简单的测试:
NSString *(^print_block) () = ^ (NSString *returned_string){
return @"this block worked!";
};
NSLog(@"%@", print_block);
我希望控制台输出是"this block worked!"
,但是我得到了大量的错误号等,以:
terminate called throwing an exception
怎么了?
编辑:建议使用答案:
NSLog (@"%@", print_block());
但这也行不通。程序在块定义的开始处终止,控制台只显示(lldb)
,Xcode 在块定义处放置一个绿色小箭头。箭头写着:
Thread 1: EXC_BAD_ACCESS (code=1, address=0x5f646e71)
我尝试了其他不起作用的方法:
NSString *(^print_block) () = ^ (NSString *returned_string){
NSString *return_me = @"this block worked!";
return return_me;
};
NSLog(@"%@", print_block);
但至少这不会终止程序。它运行良好。但是控制台输出还是错误的:
<__NSGlobalBlock__: 0x5a58>