AFAIK、__block
は、ブロック内で(ブロックの外で宣言された)変数が指すアドレスをブロック内で変更しているときに使用されます。__blockを使用する必要があるときにARCが教えてくれますか?
しかし、変数が指している値を変更しても、ポインタが同じままであればどうしますか?たとえば、NSMutableArray *array
があり、ブロック内に[array addObject:object]
を実行している場合はどうなりますか?この場合、私はポインタarray
を変更していませんが、それが指す値を変更しています。だから、NSMutableArray *array
と宣言するのにまだ__block
を使用する必要がありますか?
何コンパイラの最適化について? '__block'は、オブジェクトが決して変更されないことを示唆し、' NSArray'がインライン化された場合、その後のcapacityの呼び出しが間違っている可能性があります。 – Dani
'__block'は変数が変更可能であることを示します。変数が '__block'かconst-copy(デフォルトのように)であるかどうかにかかわらず、オブジェクトのメソッドを呼び出すことは影響を受けません。 – bbum
しかし、変数(NSArray *)が自己プロパティの場合はどうなりますか? __blockを追加する必要がありますか? – Amnysia