Objective C 的setter賦值函數視頻基礎提升課程(三)

騰訊視頻 Objective C 的setter賦值函數   連接:http://dwz.cn/zH6nM html

1、setter和getter的通常寫法
java

 setter和getter器能夠說是一個類最基本的東西,任何一門面向對象的語言,都又這個概念,C++、java等等。由於setter和getter是對面向對象語言封裝的最基本的支持。安全

在Objective-C的setter和getter器,固然也和通常的語言沒有什麼不一樣。只不過,添加了一些本身的特性。函數

好比有一個實例變量:int age;優化

先在.h文件中聲明setter和getter器atom

-(void)setAge:(int)newAge;
-(int)age;

而後在.m文件中具體實現spa

-(void)setAge:(int)newAge
{
    age=newAge;
}
-(int)age
{
    return age;
}

能夠看出來,在Objective-C中setter器沒什麼區別,不過getter器的方法名缺乏了get,由於get...在Objective-C有別的用處,因此getter器直接寫的就是變量名。線程


2、getter和setter 的調用方法code

通常的調用方法,是傳統的帶中括號[  ]的調用方法,好比orm

//好比上面的聲明是一個Person類
Person* person=[[Person alloc]init];
[person setAge:13];
int age=[person age];


點調用的方式

//點調用
person.age=13;  //.調用出如今=號左邊,至關於setter
int age=person.age   //.調用出如今=號的右邊,至關於getter
NSLog(@"%i",person.age);//這也是getter



3、setter和getter的改進寫法

每次要爲一個屬性寫上getter和setter,不得不手十分麻煩,因此有了更簡單的寫法,

在.h文件裏,直接這樣寫,表示聲明瞭一個實例屬性和它的getter和setter器

@property int age;


而後在.m文件中這樣寫,表示實現setteer和getter

@synthesize age;

這樣,就能夠和之前同樣調用getter和setter了。


4、setter和getter的改進優化

能夠看到,getter器的方法名直接就是變量名,方法名和變量名同樣,容易讓人迷糊,因此,能夠這樣優化。

在.h文件中依然這樣聲明

@property int age;

在.m文件中,這樣去寫,

@synthesize age=_age; //加上一個_
//這麼,咱們就能夠去使用_age   和使用age同樣
-(void)show
{
    NSLog(@"%i",_age);
}


5、@property的屬性

能夠使用屬性來規定@property,設定的方式以下:

@property (attribute1[,attrubute2,...])。

舉個例子:

@property (nonatomic,strong) Engine* engine;

若是你在@property設置了屬性,若是你使用@synthesize ,那麼它會自動幫你完成這些屬性的實現,若是你是本身手動的去完成實現的話,那麼,你必須本身寫出這些屬性的實現。


(1)、設置訪問方法的名字

默認的getter和setter器的名稱是和變量名關聯的,必定是setVirableName和virableName,好比上面的變量age,setter是setAge,getter是age。

能夠經過設置@property中的setter和getter屬性來修改setter和getter器的方法名。

getter=getterName

setter=setterName

舉個例子:

@property (getter=show1,setter=show2:)int age;//如今,它的getter和setter的方法名字就變了

注意:若是你設置了readonly屬性的話,那麼你就不該該設置setter屬性,要否則會給出一個編譯器的警告。


(2)、設置只讀或讀寫

下面兩個屬性很好理解,

readwrite:表示既有getter,也有setter

readonly:表示只有getter,沒有setter

這兩個屬性是互相排斥的,只能存在一個。


(3)、定義setter的語義

下面的屬性指定setter語義設置訪問器。他們是互相排斥的。

strong:指定有很強的(擁有)關係到目標對象。

weak:指定有弱(non-owning)關係到目標對象。若是目的地對象銷燬,屬性值將自動設置爲nil。(弱屬性不支持OS X上的v10.6和iOS 4,使用指定取而代之)。

copy:調用原始對象的copy()方法,建立一個原始對象的副本,用於分配給新的引用。原始的對象在調用release方法。固然這個屬性只用於實現了NSCopying協議的對象類型。

assign:指定使用簡單的賦值的setter。這個屬性是違約。  使用這個屬性對於標量的類型(如NSInteger和CGRect等);

retain: 指定retain應該調用對象上的。原始的對象在調用release。在OS X v10.6和以後,您能夠使用這個關鍵字用於內存管理方面。


(4)、訪問屬性的線程安全

nonatomic:表示不考慮線程安全

相關文章
相關標籤/搜索