標籤:setter 屬性 getter與執行個體變數的關係 點文法
什麼時setter,getter,
在OC裡, 為執行個體變數賦zhi的方法稱作setter(設定器)
讀取執行個體變數值的方法稱作getter(訪問器)
我們之前寫的那些賦值取值的方法都可以稱作setter和getter
setter、getter的書寫格式
OC裡規定裡setter和getter的書寫格式
如果一個執行個體變數是 int age; 或者int_age;
setter的書寫格式如下 - (void)setAge:(int)age;即set+首字母大寫的執行個體變數名(忽略底線)
getter的書寫格式如下, -(int)age; 即傳回值類型與變數類型一致,方法名與執行個體變數名相同(忽略底線)
setter、getter與執行個體變數的關係
屬性的定義
屬性的實現
屬性的屬性
Objective-C提供屬性的的是為了簡化程式員編碼
為屬性提供了一些關鍵字用以控制setter、getter的實現細節
這些關鍵字我們稱為屬性的屬性(attribute)
一共3大類attribute。
屬性的屬性共有三大類
第一類
例如;@property(readonly)NSString *name; 等價於 - (NSString *)name;
例如:@property(readwrite)NSString *name;
等價於 - (NSString *)name;
- (void)setName:(NSString *)name;
第二類
2.原子性控制(nonatomic、atomic)
如果原子性控制的關鍵字是atomic。setter、getter方法在多線程訪問下是絕對安全的,即setter、getter內部做了多線程訪問處理,原子性控制的預設設定是atomic;
如果原子性控制的關鍵字是nonatomic,setter、getter方法內部不會做多線程訪問處理,僅僅是普通多setter、getter方法
。。
例如:@property(readwrite , nonatomic)NSString *name;
等價於;- (NSString *)name;
- (void)setName:(NSString *)name;
第三類
例如:@property(nonatomic , assign)NSString *name;
- (void)setName:(NSString *)name
{
_name = name;
}
-(NSString *)name
{
return _name;
}
例如:@property(nonatomic,retain)NSString *name;
- (void)setName:(NSString *)name
{ if(_name != name){
[_name release];
_name = [name retain];
}
}
- (NSString *)name{
return [[_name retain]autorelease];
}
例如 @porperty(nonatomic , copy)NSString *name;
- (void)setName:(NSString *)name
{
if (_name != name) {
[_name release];
_name = [name retain];
}
}
- (NSString *)name
{
return [[_name retain] autorelease];
}
屬性需要注意的是
如果屬性是非物件類型(比如int,float等)屬性等語義設定只用assign
如果屬性是物件類型(比如NSString,NSArray等)屬性等語義設定使用retain
如果屬性是物件類型,並且想得到參數的copy,使用copy關鍵字
-點文法的使用
例如:[person setName:@“zhangsan”];
可以等價寫成 person.name = @“zhangsan”;
NSString *name = [person name];
可以等價寫成NSString *name = person.name;
本文出自 “小劉_Blog” 部落格,請務必保留此出處http://liuyafang.blog.51cto.com/8837978/1543715
Objective - C setter,getter與執行個體變數的關係, 屬性, 點文法