一、setter和getter的一般寫法
- setter和getter訪問器可以說是一個類最基本的東西,任何一門面向對象的語言,都有這個概念,C++、java等等。因為setter和getter是對面向對象語言封裝的最基本的支持。
- 在Objective-C的setter和getter器,當然也和一般的語言沒有什么不同。只不過,添加了一些自己的特性。
比如有一個實例變量:int age;
先在.h文件中聲明setter和getter訪問器
命名規則:
setter
-(void) set變量名(首字母大寫):(成員變量類型)形參名;
getter
-(成員變量類型)成員變量名;
- -(void)setAge:(int)newAge; //根據所更改的變量名稱來命名(用於賦值)
- -(int)age; //getter 根據所取得的變量名稱來命名(用於取值)
然后在.m文件中具體實現
- -(void)setAge:(int)newAge //set方法
- { if(newAge>100||newAge<0)
- {
- NSLog(@“輸入的年齡不合理,請重新賦值!”);
- }else
- age=newAge;
- -(void)setAge:(int)newAge //set方法
- { if(newAge>100||newAge<0)
- {
- NSLog(@“輸入的年齡不合理,請重新賦值!”);
- }else
- age=newAge;
- }
- -(int)age //get方法
- {
- return age; //有返回值;
- }
二、getter和setter 的調用方法
一般的調用方法,是傳統的帶中括號[ ]的調用方法,比如
- //比如上面的聲明是一個Person類
- Person* person=[[Person alloc]init];
- [person setAge:13]; //調用set方法
- int age=[person age]; //調用get方法
點調用的方式:
注意:
只有按照標准的格式定義setter和getter方法,才能使用 . 表達式(嚴格標准:一個成員變量需要自己唯一的set和get方法,一個set只能給一個成員變量賦值!)
- //點調用
- person.age=13; //.調用出現在=號左邊,相當於setter
- int age=person.age //.調用出現在=號的右邊,相當於getter
- NSLog(@"%i",person.age);//這也是getter的調用
注:
(點語法)是訪問類的屬性,本質是調用set,get方法。
—>是訪問成員變量,但成員變量默認受保護,所以常常報錯,手動設為public既可以解決這個問題。
三、setter和getter的改進寫法
每次要為一個屬性寫上getter和setter,不得不手十分麻煩,所以有了更簡單的寫法,
在.h文件里,直接這樣寫,表示聲明了一個實例屬性和它的getter和setter器
@property int age;
然后在.m文件中這樣寫,表示實現setteer和getter
@synthesize age;
這樣,就可以和以前一樣調用getter和setter了。
四、setter和getter的改進優化
可以看到,getter器的方法名直接就是變量名,方法名和變量名一樣,容易讓人迷糊,所以,可以這樣優化。
在.h文件中依然這樣聲明
@property int age;
在.m文件中,這樣去寫,
- @synthesize age=_age; //加上一個_
- //這么,我們就可以去使用_age 和使用age一樣
- -(void)show
- {
- NSLog(@"%i",_age);
- }
(關於優化的部分涉及到屬性的概念和使用,在以后的章節中會繼續講解敬請大家的關注)