0

支持的iOS 4.3與ARC,我認爲正確的方法是使用assign要支持iOS 4.3,請使用「分配」而不是弱點,但Interface Builder使用unsafe_unretained?

@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),改變的單一視圖的應用目標至4.3,和Ctrl-拖動一個UIButton到.h文件來創建的出口,將所生成的代碼是:

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

爲什麼區別和應該使用哪一個?

回答

3

根據LLVM的文檔「分配」和「unsafe_unretained」是在財產申報相當於在4.1.1. Property declarations

  • 分配意味着__unsafe_unretained所有權。
  • ...
  • unsafe_unretained意味着__unsafe_unretained所有權。

新增:在鐺源代碼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); 
+0

但他們都可以暗示相同的事情,但仍然有分歧? –

+0

@JeremyL:我相信沒有區別。我假設較舊的Xcode版本不理解'@property(unsafe_unretained,...)'。我有一些舊版本,所以我可以稍後測試,如果你真的感興趣。 –

+0

確實沒有區別。 –

1

您已經引用了對「哪些類不支持弱引用?」這個問題的回答的摘錄。 - 實際上,我想,這個摘錄僅僅適用於答案中列出的課程。

從我以前讀過ARC的時候看到,unsafe_unretainedassign之間並沒有真正的區別。

+0

回答說,他們有什麼不同? http://stackoverflow.com/questions/8397511/using-arc-lifetime-qualifier-assign-and-unsafe-unretained –

+0

該答案指的是'__unsafe_unretained',而不是'unsafe_unretained'。 – omz

相關問題