2010-10-19 94 views
16

只是如果可以的話,我一直(因爲學習OBJ-C)編寫的INT屬性如下一個簡單的問題...@property int類型?

@property(nonatomic, assign) int myValue; 

現在我想,這可能是矯枉過正,我還不如寫...

@property int myValue; 

只是好奇,我知道,「分配」是默認的行爲,而「非原子」可以更快的分數......

所有最好的

Gary

回答

8

好,宣告原子的問題是你是否明確一個單獨的一個聲明默認的屬性。前者將取決於您的代碼的性質 - 是否可能存在有爭議的多線程訪問屬性?

關於後者,它主要是一個風格問題,但總的來說,我認爲你應該明確清晰的一面。確切地說,您的生活需要幾秒鐘才能輸入這些額外的幾個按鍵?

2

非原子生成的代碼更少,速度稍快。我確實同意它非常詳細。

如果您的應用程序可以使用多個線程,你會很高興已經把這些明確的限定詞,當你遇到莫名其妙的錯誤...

33
@property(nonatomic, assign) int myValue; 

是不一樣的

@property int myValue; 

的屬性的默認是原子(沒有明確的關鍵字atomic)。所以第二個例子是一個原子屬性。對於原始類型的屬性,我不知道是否發生任何鎖定,但可能會引入內存寫入障礙(即,setter將強制將值寫回主存儲器,而不是寫入緩存)。因此原子性質比非原子性質慢得多。然而,作爲該計劃總執行時間的一小部分,它們仍可能佔很小的比例。直到你剖析你的代碼,你纔會知道。