为了支持带有ARC的iOS 4.3,我认为正确的方法是使用assign
:
@property (assign, nonatomic) UIView *view;
@property (assign, nonatomic) MYNode *node;
这是对的吗?我还在Apple's doc for 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;
为什么应该使用差异和哪一个?
答案 0 :(得分:3)
根据llvm文档中的4.1.1. Property declarations,“assign”和“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);
答案 1 :(得分:1)
你引用了“哪些类不支持弱引用?”这一问题的回答摘录。 - 实际上,我猜,摘录仅适用于答案中列出的类。
根据我在学习ARC之前所读到的内容,unsafe_unretained
和assign
之间没有真正的区别。