0

要使用 ARC 支持 iOS 4.3,我认为正确的方法是使用assign

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

那是对的吗?我还在Apple 的 Transitioning to ARC 文档中看到以下内容:

对于声明的属性,你应该使用assign而不是weak;对于变量,您应该使用 __unsafe_unretained 而不是 __weak。

但是,如果我使用当前的 Xcode (4.4.1),将 Single View 应用程序目标更改为 4.3,然后按住 Ctrl 键将 UIButton 拖到.h文件中以创建插座,则生成的代码为:

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

为什么有区别,应该使用哪一个?

4

2 回答 2

3

根据4.1.1。llvm 文档“assign”和“unsafe_unretained”中的属性声明在属性声明中是等效的:

  • assign 意味着 __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

您引用了对“哪些类不支持弱引用?”问题的回答的摘录。- 实际上,我想,摘录仅适用于答案中列出的类。

从我之前学习 ARC 时读到的内容来看,unsafe_unretained和之间没有真正的区别assign

于 2012-09-08T10:15:35.630 回答