iOS開發基礎 屬性關鍵字

2021-10-23 17:24:14 字數 1450 閱讀 5664

目錄

一.weak

二.strong

三.copy

四.atomic

五.nonatomic

六.assign

七.retain

八.readwrite

九.readonly

在arc下,不顯示指定關鍵字時,預設為:

普通資料:atomic、readwrite、assign

普通oc物件:atomic、readwrite、strong

開啟arc時才會使用,相當於assign,可以把對應的指標變數重置為nil。

一般用於修飾ui控制項,如下圖所示:

如圖所示,只要我們建立的控制項加入到subviews中,那這個控制項就會一直存在,我們所建立的指標是weak還是strong只是多加一條虛線還是實線的區別。但是如果remove了這個控制項,那麼如果建立的指標是strong,那麼我們就還引用著乙個沒有用的物件,占用記憶體。因此一般使用weak修飾ui控制項。

開啟arc時才會使用,相當於retain。

nsstring、nsarray、nsdictionary等經常使用copy關鍵字,因為他們有對應的可變型別:nsmutablestring、nsmutablearray、nsmutabledictionary,為確保物件中的屬性不會無意間變動,應該在設定新屬性值時拷貝乙份,保護其封裝性。

block使用copy是從mrc遺留下來的習慣,在mrc中,方法內部的block是在棧區的,使用copy可以把它放到堆區。在arc中寫不寫都行,對於block使用copy還是strong效果都是一樣的,但建議寫上copy,告知呼叫者編譯器會自動對block進行copy操作。

atomic使系統自動生成的getter/setter方法會進行加鎖操作,僅僅保證了getter/setter訪問方法的執行緒安全,但不能保證整個物件都是執行緒安全的。不寫預設atomic。

nonatomic使系統自動生成的getter/setter方法不會進行加鎖操作,執行緒訪問不安全,但速度更快,當多個執行緒同時訪問同乙個屬性時,會出現無法預料的結果。如果沒有多執行緒之間的通訊,使用nonatomic是更好的選擇。

不會使引用計數器加1,直接賦值。用於基本資料型別、列舉、結構體等非oc物件型別。

與weak的區別:

weak物件遭到摧毀時,系統會將物件的指標指向nil,在oc給nil發訊息是不會有什麼問題,如果使用assign修飾物件,物件遭到摧毀時,指標還是會指向原來的物件,由於物件已經被摧毀,此指標會變為野指標。再向此物件傳送訊息時,很容易造成程式崩潰。因此assign可以用於修飾非oc物件,但是不能修飾oc物件。

會使用引用計數加1.

此標記說明屬性會被當成讀寫的,這也是預設屬性。

此標記說明屬性只可以讀,不能設定,可以獲取。

參考:屬性關鍵字的使用

IOS 屬性關鍵字

ios 5之後便支援arc了,在arc的情況下物件引用分為 strong強引用 乙個物件如果有乙個及以上的強引用指向它,那麼他將不會釋放 weak弱引用 乙個物件如果只有弱應用指向它,那麼它將被釋放掉 注 兩個物件若相互保留對方的強引用,那麼會照成記憶體洩漏。其他 copy 物件的複製,複製之後得到...

iOS屬性關鍵字

常用的屬性關鍵字 assign,weak,unsafe unretained,strong,retain copy,readonly,readwrite nonatomic,natomic及 weak,block synthesize 和 dynamic,只有準確的理解了他們的原理,用起來才能得心應...

iOS屬性關鍵字

readwrite readonly assign retain weak strong copy 參考文章 屬性的本質就是,例項變數 get set方法 眾多屬性關鍵字是對自動生成的get set方法進行了修飾。程式的原子性指 整個程式中的所有操作,要麼全部完成,要麼全部不完成,不可能停滯在中間某...