屬性
點表達式
- 使用了@ 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;
}