IOS——OC——淺談OC中的setter 和getter方法


一、setter和getter的一般寫法

 
  •  setter和getter訪問器可以說是一個類最基本的東西,任何一門面向對象的語言,都有這個概念,C++、java等等。因為setter和getter是對面向對象語言封裝的最基本的支持。
  • 在Objective-C的setter和getter器,當然也和一般的語言沒有什么不同。只不過,添加了一些自己的特性。
 
比如有一個實例變量:int age;
先在.h文件中聲明setter和getter訪問器
命名規則:
setter
-(void) set變量名(首字母大寫):(成員變量類型)形參名;
getter
-(成員變量類型)成員變量名;
  1. -(void)setAge:(int)newAge;  //根據所更改的變量名稱來命名(用於賦值)
  2. -(int)age;                   //getter 根據所取得的變量名稱來命名(用於取值)

 

 

然后在.m文件中具體實現

  1. -(void)setAge:(int)newAge  //set方法
  2. {  if(newAge>100||newAge<0)
  3.      {
  4.      NSLog(@“輸入的年齡不合理,請重新賦值!”);
  5.     }else
  6.      age=newAge; 
  7. -(void)setAge:(int)newAge  //set方法
  8. {  if(newAge>100||newAge<0)
  9.      {
  10.      NSLog(@“輸入的年齡不合理,請重新賦值!”);
  11.     }else
  12.      age=newAge;  
  13. }  
  14. -(int)age  //get方法
  15. {  
  16.     return age;  //有返回值;
  17. }  
可以看出來,在Objective-C中setter器沒什么區別,不過getter訪問器的方法名缺少了get,因為get...在Objective-C有別的用處,所以getter器直接寫的就是變量名。

 

二、getter和setter 的調用方法

一般的調用方法,是傳統的帶中括號[  ]的調用方法,比如

  1. //比如上面的聲明是一個Person類  
  2. Person* person=[[Person alloc]init];  
  3. [person setAge:13];  //調用set方法
  4. int age=[person age]; //調用get方法 
 
 
點調用的方式:
 注意:
只有按照標准的格式定義setter和getter方法,才能使用 . 表達式(嚴格標准:一個成員變量需要自己唯一的set和get方法,一個set只能給一個成員變量賦值!)
  1. //點調用  
  2. person.age=13;  //.調用出現在=號左邊,相當於setter  
  3. int age=person.age   //.調用出現在=號的右邊,相當於getter  
  4. 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文件中,這樣去寫,
  1. @synthesize age=_age; //加上一個_  
  2. //這么,我們就可以去使用_age   和使用age一樣  
  3. -(void)show  
  4. {  
  5.     NSLog(@"%i",_age);  
  6. }  

 (關於優化的部分涉及到屬性的概念和使用,在以后的章節中會繼續講解敬請大家的關注)

http://www.cnblogs.com/Rong-Shengcom/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM