天天看點

@property擴号内支援的幾個屬性

1,getter=getterName,setter=setterName,設定setter與getter的方法名

2,readwrite,readonly,設定可供通路級别

2,assign,setter方法直接指派,不進行任何retain操作,為了解決原類型與環循引用問題

3,retain,setter方法對參數進行release舊值再retain新值,所有實作都是這個順序(CC上有相關資料)

4,copy,setter方法進行Copy操作,與retain處理流程一樣,先舊值release,再Copy出新的對象,retainCount為1。這是為了減少對上下文的依賴而引入的機制。

5,nonatomic,非原子性通路,不加同步,多線程并發通路會提高性能。注意,如果不加此屬性,則預設是兩個通路方法都為原子型事務通路。

它要與@synthesize一起使用才有意義。

atomic的意思就是setter/getter這個函數是一個原語操作。如果有多個線程同時調用setter的話,不會出現某一個線程執行setter全部語句之前,另一個線程開始執行setter情況,相當于函數頭尾加了鎖一樣。

nonatomic不保證setter/getter的原語行,是以你可能會取到不完整的東西。

比如setter函數裡面改變兩個成員變量,如果你用nonatomic的話,getter可能會取到隻更改了其中一個變量時候的狀态,這樣取到的東西會有問題。

如果不需要多線程支援的話,當然nonatomic就夠用了,另外由于不涉及鎖操作,是以它執行相對快點