一、set方法和get方法
1.set方法和get方法的使用場合
@public的成員可以被隨意賦值,應該使用set方法和get方法來管理成員的訪問(類似機場的安檢、水龍頭過濾,過濾掉不合理的東西),比如僵屍的生命值不能為負數
2.set方法
- 作用:用來設置成員變量,可以在方法里面過濾掉一些不合理的值
- 命名規范:
- 方法都是以set開頭,而且后面跟上成員變量名,成員變量名的首字母必須大寫
- 形參名稱不要跟成員變量同名
3.get方法
- 作用:返回對象內部的成員變量
- 命名規范:get方法的名稱一般就跟成員變量同名
- 成員變量的命名規范
- 成員變量都以下划線 _ 開頭
- 可以跟get方法的名稱區分開
- 可以跟其他局部變量區分開,一看到下划線開頭的變量,肯定是成員變量
- 代碼示例
#import <Foundation/Foundation.h>
// 聲明
@interface Car : NSObject
{
int _wheels; // 輪子個數
}
/*set方法*/
- (void) setWheels:(int)wheels;
/*get方法*/
- (int) wheels;
@end
@implementation Car
// set方法的實現
- (void) setWheels:(int)wheels
{
// 對外面傳進來的輪子數進行過濾
if (wheels<=0)
{
wheels = 1;
}
_wheels = wheels;
}
// get方法的實現
- (int) wheels
{
return _wheels;
}
@end
6.封裝的好處
- 過濾不合理的值
- 屏蔽內部的賦值過程
- 讓外界不必關注內部的細節
二、類方法
1.基本概念
直接可以用類名來執行的方法(類本身會在內存中占據存儲空間,里面有類\對象方法列表)
2.類方法和對象方法對比
- 對象方法
- 以減號-開頭
- 只能讓對象調用,沒有對象,這個方法根本不可能被執行
- 對象方法能訪問實例變量(成員變量)
2.類方法
- 以加號+開頭
- 只能用類名調用,對象不能調用
- 類方法中不能訪問實例變量(成員變量)
- 使用場合:當不需要訪問成員變量的時候,盡量用類方法
- 類方法和對象方法可以同名
三、構造方法
- 對象創建原理
- new的拆分兩部曲
- 分配內存(+alloc)
- 初始化(-init)
Person *p1 = [Person alloc];
Person *p1 = [p1 init];
合成一句后:
Person *p = [[Person alloc] init];
2.init方法的重寫
- 想在對象創建完畢后,成員變量馬上就有一些默認的值
- init方法的重寫過程
- (id)init
{
if (self = [super init])
{
_age = 10;
}
return self;
}
3.自定義構造方法
- 構造方法的一些規范
- 返回值是id類型
- 方法名都以init開頭
- (id)initWithAge:(int)age {
if (self = [super init]) {
_age = age;
}
return self;
}
- 傳遞多個參數進行初始化
- (id) initWithAge:(int)age andNo:(int)no;
