ブロックの基礎を理解しようとしています。この簡単なテストを書きました:
NSString *(^print_block) () = ^ (NSString *returned_string){
return @"this block worked!";
};
NSLog(@"%@", print_block);
コンソール出力は になると"this block worked!"
思っていましたが、代わりに大量のエラー番号などが表示され、次のように終わります。
terminate called throwing an exception
どうした?
編集:答えは使用することが提案されています:
NSLog (@"%@", print_block());
しかし、それもうまくいきません。プログラムはブロック定義の開始時に終了し、コンソールには only(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>