誰もこのブロック構文がどのように機能するか説明できますか?Objective-Cブロックの構文 - 誰かがこれを説明できますか?
AStreamBuilder stream_builder = [ [ ^(void)
{
// some more code..
return (NSInputStream *)[ NSInputStream inputStreamWithFileAtPath: some_path ];
} copy ] autorelease ];
return stream_builder;
ブロックの名前は何ですか。ブロックがコピーされてからオートレリースされるのはなぜですか?私はここで何が起きているのか混乱しています。ブロックはAStreamBuilderを返すと言われていますが、ブロック本体の内部ではNSInputStreamのインスタンスを返します。
誰かがこれを打破できますか?
ブロックがNSStreamのインスタンスを返す場合、どのように戻り値の型が上記の構文で宣言されていないのですか? – randombits
これは、そこに表示される 'void'が戻り値ではなく引数であるためです。このブロックには引数はありません。戻り値の型はここでは何も指定されていません。 "[戻り値の型はオプションで、戻り値のステートメントから推測されます。](http://clang.llvm.org/docs/BlockLanguageSpec.txt)" – puzzle
@randそこでは2つのことが起こっています。一方はパズルが言ったように、return型はreturn文から推論されます。一方、 'AStreamBuilder'は、ブロックの戻り値の型を定義する' typedef'です。代入が機能するためには、推定される戻り値の型は、 'AStreamBuilder'で定義された戻り値の型と一致しなければなりません。 Xcodeの 'AStreamBuilder'の宣言を右クリックし、定義にジャンプを選択することで調べることができます。 –