屬性 淺談

屬性

點表達式

  • 使用了@ property 和@ synthesize 後,我們在 setter 和 getter 方法調用的地方可以使用(.)操作來代替函數調用.
  • 點表達式只是調用訪問器( setter 和 getter) 的一種快捷方式,並沒用其他的功能.
  • 點的使用語我們 C語言中訪問 struct 成員相似, 在 Objective-C 裏,如果點出現在 = 左邊,表示調用 setter 方法;如果點出現在 = 右邊,表示調用getter 方法.

建立 類QYTire繼承與父類 NSObject,在 QYTire.h 文件中建立方法

注意: //後是註釋,幫助理解

@interface QYTire : NSObject
//{
//    float pressure;//胎壓
//    float treadth;//輪胎花紋情況
//}
@property float pressure;//胎壓
@property float treadth;//輪胎花紋情況


- (id)initWithPressure:(float)pressure;
- (id)initWithTreadth:(float)treadth;


- (id)initWithPressure:(float)pressure andTreadth:(float)treadth;

在 QYTire. m 文件中,使用了指定初始化方式,在這裏不用關心,只需要關注其成員變量調用時,前面使用了 self. , 例如 self.pressure, 其相當於[self pressure],使用 self 代表本身向自己發送了調用 pressure 的方法,其方法有編譯器自動實現,代碼我們是看不到的.

@implementation QYTire

- (id)init
{
    self = [self initWithPressure:30.5f andTreadth:20.6f];
    if (self) {
    }
    return self;
}


- (id)initWithPressure:(float)p
{
    self = [self initWithPressure:p andTreadth:20.6f];
    if (self) {
    }
    return self;
}

- (id)initWithTreadth:(float)t
{
    self = [self initWithPressure:30.5f andTreadth:t];
    if (self) {
    }
    return self;
}

//指定初始化方法
- (id)initWithPressure:(float)p andTreadth:(float)t
{
    self = [super init];
    if (self) {
        self.pressure = p;
        self.treadth = t;
    }
    return self;
}

特性擴展

1.在特性聲明的時候,可以添加以下關鍵字,告訴編譯器如何實現 setter 和 getter 方法.

  • assign //簡單賦值,主要用於基本數據類型
  • copy //創建一個新的對象,新的對象和舊對象是獨立的兩個對象
  • retain //將對象計數器加1
  • readonly //表示只讀屬性  只會生成getter方法 不會生成setter方法
  • readwrite //默認值,表示生成setter和getter方法
  • nonatomic //非原子訪問,不加同步 ,多線程併發訪問提高性能 (對多線程的保護,防止在未寫完,被另一個線程讀取,造成數據錯誤)

名稱的使用

  • 主要適用於當實例變量與屬性名稱需求不同時
@synthesize name = appellation;

此時,編譯器仍根據屬性的特點,合成 setName 和 name 方法,但在是實現的時候,用的是 appellation 實例變量.如下所示:

- (void)setName:(NSString*)name
{
    appellation = name;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章