0

ARCでiOS4.3をサポートするには、次を使用するのが適切な方法だと思いますassign

@property (assign, nonatomic) UIView *view;
@property (assign, nonatomic) MYNode *node;

あれは正しいですか?ARCへの移行に関するAppleのドキュメントにも次の内容があります。

宣言されたプロパティには、weakではなくassignを使用する必要があります。変数については、__weakの代わりに__unsafe_unretainedを使用する必要があります。

ただし、現在のXcode(4.4.1)を使用し、シングルビューアプリのターゲットを4.3に変更し、Ctrlキーを押しながらUIButtonを.hファイルにドラッグしてアウトレットを作成すると、生成されるコードは次のようになります。

@property (unsafe_unretained, nonatomic) IBOutlet UIButton *foo;

なぜ違いがあり、どちらを使用する必要がありますか?

4

2 に答える 2

3

4.1.1によると。llvmドキュメントの「assign」と「unsafe_unretained」のプロパティ宣言は、プロパティ宣言と同等です

  • 割り当ては、__unsafe_unretained所有権を意味します。
  • ..。
  • unsafe_unretainedは、__unsafe_unretainedの所有権を意味します。

追加: clangソースコードhttp://clang.llvm.org/doxygen/SemaObjCProperty_8cpp_source.html

00523   // 'unsafe_unretained' is alias for 'assign'.
00524   if (Attributes & ObjCDeclSpec::DQ_PR_unsafe_unretained)
00525     PDecl->setPropertyAttributes(ObjCPropertyDecl::OBJC_PR_assign);
于 2012-09-08T10:16:16.527 に答える
1

「弱参照をサポートしていないクラスはどれですか?」という質問への回答からの抜粋を引用しました。—実際、抜粋は、回答にリストされているクラスにのみ適用されることを意図していると思います。

unsafe_unretainedARCを勉強していたときに読んだことから、との間に実際の違いはありませんassign

于 2012-09-08T10:15:35.630 に答える