2016-01-20 63 views
0

我們知道,在ARC規則,默認值是strong,所以沒關係使用@property定義與ARC:強是默認值,但什麼是基本類型的默認值?

@property NSString *downloadPath 

但爲什麼

@property (readonly) CGFloat progress 
@property (readonly) BOOL isSSL 

好嗎?由於它們是基本類型,因此應使用assign。我能否理解ARC規則如下:

當屬性是基本類型時,默認值爲assign,當屬性爲對象類型時,默認值爲strong

+0

您的理解是正確的。 – Avi

回答

1

clang documentation所有權推論:

如果一個對象都被定義爲保留性對象所有者類型,但沒有明確的所有權預選賽中,其類型隱含調整爲具有__strong資格。

這樣做的原因可以在same page發現:

利用強大的默認情況下是安全的,有關推斷所有權的一般規則ARC一致。不幸的是,它與非ARC規則不一致,該規則聲明這些屬性是隱含分配的。但是,該規則在ARC中顯然是站不住腳的,因爲它會導致默認不安全的代碼。

由於文件說,默認的所有權限定符assign,但對於可保留類型(又名對象)的默認預選賽改爲strong,這幫助開發人員以書面安全的代碼。

1

U是對的!另一個默認屬性是atomic

0

默認值是什麼?

基本類型 - 基本類型和struct類型 - 是堆棧分配的,它們的值在分配時被複制。對於這樣的類型strong,weak,unsafe_unretainedcopy都沒有意義 - 沒有堆對象被引用和值總是被複制。

所以這些都不是默認設置。

其中留下assign(和文檔同意)。所以相信你的直覺!

HTH