5

次のコード行があります。

__weak NSBlockOperation *weakOperation = operation;

このコンパイラエラーを引き起こしている:

__weak attribute cannot be specified on automatic variable.

これは、ARC を有効にしていないためです (まだ切り替えの準備ができていません)。したがって、別の StackOverFlow の質問から、次の使用が推奨されました。

__unsafe_unretained NSBlockOperation *weakOperation = operation; 

これによりエラーは解消されますが、私が使用しているコンテキストでは機能しません(興味がある場合は、この質問を参照してください: How to cancel NSOperationQueue )。

私の質問は、__weakこの警告を取り除くために、このインスタンスでキーワードを何に置き換えることができるかということです。を使用すると、すべてが実際に正しく動作し__weakますが、iOS の将来のバージョンでは持ちこたえられないのではないかと心配しています。

4

1 に答える 1

7

iOS の将来のバージョンについて心配する必要はありません。これ__weakは、コードの生成中にコンパイラによって解釈されるものであるためです。

weakOperationあなたの他の投稿を見ると、ブロック内からの参照にもかかわらず、あなたの目標は保持されないようにすることであることがわかります。ARC を使用しない特定のケースでは、に置き換え__weakて、キャプチャ中に__block変数を保持してはならないことを示すことができます。

動作への影響は、ARC と手動保持カウントでは異なることに注意して__blockくださいretain

于 2013-01-23T17:02:02.467 に答える