atomic && nonatomic那些事兒

atomic:
設置成員變量的@property屬性時,默認爲atomic,提供多線程安全。

加了atomic,setter函數會變成下面這樣:
{lock}
if (property != newValue) {
[property release];
property = [newValue retain];
}
{unlock}

所以一般情況下,我們都會使用屬性nonatomic,理由如下:

  • 在iOS中使用同步鎖的開銷比較大,這會帶來性能的問題;
  • 一般情況下並不要求屬性必須是“atomic”的,因爲這並不能很好的保證“線程安全”。若要實現“線程安全”的操作,還需要採用更爲深層的鎖定機制。eg:一個線程在連續多次讀取某個屬性的過程中,創建另外一個線程同時改寫該值,那麼即便將屬性聲明爲atomic,也還是會讀取到不同的屬性值。

因此,iOS程序一般都會使用nonatomic屬性。但是在Mac OS X程序時, 使用atomic屬性通常都不會有性能瓶頸

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章