Objective-C屬性

一.屬性(描述類的特徵)
1.屬性是Objective-C 2.0定義的語法,爲實例變量提供了setter和getter方法的默認實現,能在一定程度上簡化代碼,增強實例變量的訪問安全性.
2,屬性的定義
2.1.屬性的聲明:  使用@property聲明屬性,相當在@interface中聲明瞭兩個方法(setter和getter),如:@property (NSString *)name;
2.2.屬性的實現: 使用@synthesize實現屬性,相當於在@implementation中實現了setter和getter這兩種方法,如:@synthesize name = _name;
二.屬性的屬性
1.爲屬性提供了一些關鍵字用以控制setter、getter的實現細節,這些關鍵字我們稱之爲屬性的屬性(attri),共有三大類的attribute.

三大類attribute:
    第一大類:讀寫控制
       讀寫控制包括:
    readonly: readonly告訴編器,之只聲明getter方法,無setter方法        readwrite:告訴編譯器,即聲明setter方法也聲明getter方法
    第二大類:原子性控制:
    atomic:setter、getter方法在多線程訪問下是絕對安全的,即setter、getter內部做了多線程訪問處理.原子性控制的默認設置是atomic;
    nonatomic:setter、getter內部不會做多線程訪問處理
程序開發過程中,setter、getter處處都在⽤用,如果使⽤用atomic,需要不斷 的對setter、getter加鎖解鎖以保證線程訪問安全,會很佔⽤用系統資源,降低系統性能.
   第三大類:語義設置(assign,retain,copy)
assign:setter、getter內部實現是直接賦值.
retain:setter、getter的內部會做內存優化.
copy:setter、getter的內部也會做內存優化

如果屬性是非對象類型(比如int,float等)屬性的語義設置使用assign,
如果屬性是對象類型(比如NSString,NSArray等),屬性設置爲retain,
如果屬性是對象類型並且想得到參數的copy,使用copy關鍵字

三.點語法
點語法提供了一種快捷的訪問方式,凡符合系統默認setter、getter書寫格式的方法都可以使用點語法,屬性是一對getter、setter方法,點語法是屬性的另一種調用格式.
四.KVC(key-value-coding,即鍵值編碼)
KVC是一種間接訪問實例變量的方法.
key:鍵沒用於標識實例變量
value:實力變量對應的值

修改值:
setValue:forKey:
setValue:forKryPath:
setValue:forUndefinedKey:   
        setValuesForKeysWithDictionary:

獲取值:
valueForkey

valueForKeyPath:

valueForUndefinedKey:

 注意:當key值不存在的時候,會執行setValue:forUndefinedkey:

系統默認實現是拋出一個異常.

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