您好,登錄后才能下訂單哦!
學習屬性之前回憶一下之前學到的setter方法和getter方法:
(1)setter方法的作用:用來為單一的實例變量賦值(只能是一個實例變量,多了的叫做get方法)
(2)setter方法的寫法標準: - 號方法, 無返回值, 名字以set開頭+要設置的變量的實例變量名(首字母需大寫):(setter方法有且只有一個參數)+參數的類型(和實例變量的類型相同)+參數名(和實例變量名相同)
(3)getter方法的作用:用來獲取單一實例變量的值.
(4)getter方法的寫法標準: - 號方法, 有返回值(返回值類型和實例變量類型相同) 方法名直接和實例變量名相同 無參數
當實例變量較多的時候,用setter方法和getter方法會很不方便,代碼量也加大,所以就有了屬性的出現.屬性是OC2.0之后出來的新的語法,用來替代setter和getter方法,使用屬性可以快速創建setter和getter方法的聲明,以及setter和getter方法的實現.此外,屬性還添加了對實例變量操作的安全處理.
(1)屬性的寫法標準: @property(用來定義屬性) 屬性的類型(和實例變量的類型相同) 屬性名(和實例變量名相同)
(2)注意:@property 知識自動聲明setter和getter方法的聲明
屬性的三大特性:
(1)第一大特性:讀寫特性
readonly 告訴編譯器,屬性在自動生成方法時,只會生成getter方法,不會生成setter方法
readwrite 告訴編譯器,屬性在自動生成方法時,既要生成setter方法,也要生成getter方法,為系統默認的讀寫特性.
setter = aa; 告訴編譯器,當自動生成setter方法時,setter方法的方法名為指定的名字aa,而不采用默認的
getter = bb; 告訴編譯器,當自動生成getter方法時,getter方法的方法名為指定的名字bb,而不是采用默認的
(2)第二大特性:原子性特性
atomic : 原子特性,保證線程安全,內部做了安全處理(枷鎖與解鎖).為系統默認的原子特性.
nonatomic : 非原子性,不保證線程的安全,因為對于setter和getter方法的使用,比較頻繁,在一段時間內可能要多次訪問,所以使用atomic會非常消耗系統的資源,降低程序的執行效率,使用nonatomic雖然不能保證線程的安全,但是一般情況下得使用都是安全的,所以對于原子特性,使用nonatomic
(3)第三大特性:語義特性
assign : 直接賦值,針對于基本數據類型使用,也可以針對對象類型使用,為系統默認的語義特性
copy : 針對對象類型使用,并且要服從NSCopying協議的對象才可以,會復制出一個新的對象,擁有新的對象所有權(引用計數+1)(暫時理解到這里)
retain : 針對對象類型使用,會造成對象的引用計數+1.
屬性的實現:
(1)寫法標準:@synthesize 屬性名 = 實例變量(指定的setter和getter方法內部所要操作的實例變量)
(2)如果標準寫法中指定的實例變量沒有定義,系統會自動生成指定的實例變量,但是生成的實例變量是私有的,子類不能直接訪問,如果實例變量想讓子類訪問,那么在.h文件中必須定義實例變量.
(3)如果未指定setter和getter內部所要訪問的實例變量時,系統會自動生成一個和屬性名一樣的實例變量.
(4)對于setter和getter方法,如果我們實現了,系統就不會再自動生成
(5)如果在.m文件中未通過@synthesize對屬性進行合成,系統會自動合成,只不過此時系統默認的setter和getter方法內部所操作的實例變量是 _屬性名
(6)如果將@synthesize省略,我們自己實現setter和getter方法時,系統就不會生成對應的setter和getter方法,以及實例變量.
(7)常用的是只在.h文件中聲明屬性,其他的系統自動生生成.
點語法,是一種快速訪問setter和getter方法的方式(類似于之前的結構體變量訪問結構體成員)
寫法標準:對象名.屬性名 -----如果放在等號的左邊,就是調用setter方法,其他情況都是調用getter方法
聲明屬性時默認生成對應的setter和getter方法,所以屬性和setter及getter方法都有關聯.
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。