set和get方法
承接上一篇的內容,用p訪問_age p->_age
會報錯,因爲_age是一個被保護的成員變量
(補充編碼規範,類名首字母大寫,變量下滑線開頭)
提供方法
+類型方法 [類名 方法]
-實例方法 [對象 方法]
類不能調用實例方法。
get方法不是以get開頭,直接寫成員變量的小寫
比如對 _name 變量進行訪問 方法名寫name
//給name提供訪問方法
//在類的聲明中 聲明方法:
-(NSString*)name;
//在類的方法實現中進行實現
-(NSString*)name{
return name;
}
主函數發送消息
NSString* name= [p1 name];//用一個字符串類型變量接收返回值
NSLog(@"name is %@",name);
get方法一定是實例方法,同理給age提供訪問方法。
聲明:-(NSInteger )age;
實現:-(NSInteger )age{ return _age};
上面學習了get方法,外部可以調用方法獲取值。
同樣也存在set方法,通過調用方法對變量的值進行修改。
方法名的約定規範是set開頭+變量名
例如對 _name進行設置set方法
//(類型說明)(函數返回值類型)方法名:(參數類型)參數名;
-(void)setName:(NSString*)name;
//類的實現
-(void)setName:(NSString*)name
{
_name=name;
}
//主函數中使用
Person* p1=[Person new];
[p1 setName:@"小強"];
//現在p1的_name變量值爲 小強 了。
interface裏聲明的方法,必須在implementation實現,相當於對外的接口公開的
在implementation裏也可以寫沒有聲明過的方法,相當於私有的函數,共自己內部使用。
多參數方法的使用和意義
c語言中
void printTwoNumbers(int a,int b)
oc中每一個冒號後帶一個形參,第一個參數和第二個參數的冒號之間要加一個空格。(這個空格尤其重要 容易忘記)
-(void)printTwoNumbers:(NSInteger)num1 :(NSInteger)num2;
一個冒號一個參數 參數直接加空格
使用時是這樣
[t1 printTwoNumbger:5 :7];
增加標籤可以提升代碼的可讀性。在:之前加入要標註的內容
-(void)printTwoNumbers:(NSInteger)num1 SecondNumber:(NSInteger)num2;
構造函數
構造方法是實例方法 用-號
創建一個對象
[Person new];自動調用構造方法。
[[Person alloc] init];
instancetype只能作爲構造方法的返回值
系統自帶的構造方法init(無參數的) 在NSObject提供
不需要聲明
帶參數的構造方法(要用initWith…)注意W大寫
自定義的構造方法需要顯示聲明
固定格式(在if(self){}裏寫操作的步驟)
創建一個新對象,等效於//裏的
調用了系統自帶的構造方法。
使用如下,調用自定的構造函數(因爲帶有了參數)
由於-號 是實例方法,[]中第一個 要是一個對線 [Person alloc]系統給分配,返回值是一個對象類型。