iOS開發之--屬性關鍵字以及set和get方法


一、屬性分為三大類

1、讀寫性控制

  a.readOnly只讀,只會生成get方法,不會生成set方法

  b.readWrite可讀可寫,會生成set方法,也會生成get方法(默認設置)

 2、setter相關修飾符

   a、assign:表示直接賦值,用於基本數據類型,包括id類型,這個修飾符不會牽涉到內存管理,但是如果是對象類型,使用此修飾符則可能會導致內存泄露

   b、retain:針對對象類型進行內存管理,如果對基本數據類型使用,則X-code會直接報錯,當給對象類型使用此修飾符時,setter方法會先將舊的對象屬性release掉,在對新的對象進行一次賦值並進行一次retain操作;

   c、copy:主要用在NSString類型,表示賦值內容

  系統默認屬性是assign,retain是指針的復制不重新分配內存空間,copy是內容的復制;

 3、原子性屬修飾符:atomic | nonatomic

    atomic:表示是線程安全的

    nonatomic:表示是非線程安全的,使用此屬性性能會提高一些

    系統默認是atomic

4、getter和setter修飾符

   這兩個屬性修飾符用於社差自定義生成的getter和setter方法名,使用之后將不再使用系統默認的setter和getter方法名;

 

1、在頭文件中用@property聲明一個屬性名,編譯器會自動為我們轉換成這個屬性名的getter方法和setter方法。

2、在實現文件中使用@synthesize propertyName,編譯器先會查找這個屬性名的setter方法和getter方法有沒有被人為實現,如果已經實現,則不再實現,如果沒有,則會幫我們生成一個屬性命的setter方法和getter方法。

3、當在實現文件中使用了@synthesize propertyName,編譯器還會做一件事情,在類成員變量中查找一個名為_propertyName的成員變量,如果沒有,再繼續查找名為propertyName的成員變量,如果這兩個都沒有,編譯器會自動為我們生成一個私有的名為_propertyName的成員變量。注意,系統自動創建的都是私有的。

4、當在實現文件中這樣寫@synthesize propertyName = varName;時,setter和getter方法所對應的是一個名為varName的成員變量,修改和讀取的是varName成員變量的值。

5、當我們在實現文件中不寫@synthesize propertyName時,在Xcode 4.5之前的版本不會幫我們自動實現setter和getter方法,系統當然也不再會為我們生成對應的成員變量。但是在Xcode 4.5之后可以不用寫@synthesize了,就跟3、4一樣了。

6、當我們既定義了@synthesize,又在實現文件中人為重寫setter和getter方法時,那么@synthesize將不再工作,也就不會為我們創建沒有定義的_propertyName成員變量了,這時候如果在setter和getter方法中調用_propertyName將會發生編譯錯誤

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM