1.面向?qū)ο蟮母拍?
在C語言中,我們解決一個(gè)問題,考慮的是解決這個(gè)問題需要那些步驟胰锌,這是面向過程侦鹏,注重的是步驟陨献,而在OC中寸士,解決一個(gè)問題谜诫,需要考慮的是會(huì)用到那些對(duì)象慕趴,這就是面向?qū)ο?
2.如何創(chuàng)建對(duì)象:
OC中痪蝇,要?jiǎng)?chuàng)建對(duì)象首先得有類,具有相同屬性的事物冕房,我們可以把它抽成一個(gè)類躏啰,有了類就可以創(chuàng)建對(duì)象了
3.如何設(shè)計(jì)一個(gè)類:
一個(gè)類需要一個(gè)類名,成員變量(屬性)耙册,方法(行為)给僵,使用OC的關(guān)鍵字@interface 聲明一個(gè)類的成員變量和方法,@implementation 來實(shí)現(xiàn)方法,已@end結(jié)束
@interface Person : NSObject
@property (nonatomic, assign) int age;
- (void)eat;
@end
@implementation Person
- (void)eat
{
NSLog(@"%d的人在吃飯"帝际,self.age);
}
@end
上面代碼中蔓同,就創(chuàng)建了一個(gè)Person這個(gè)類,并且有一個(gè)_age屬性蹲诀,有一個(gè)沒有返回值的eat方法斑粱,并且繼承了NSObject這個(gè)基類,:冒號(hào)代表繼承
4.創(chuàng)建對(duì)象:
上面創(chuàng)建了一個(gè)person這個(gè)類脯爪,并且繼承了基類NSObject则北,所以Person這個(gè)類就擁有了父類的所有方法,現(xiàn)在可以創(chuàng)建對(duì)象啦披粟,創(chuàng)建對(duì)象可以調(diào)用父類的new方法也可以調(diào)用父類的alloc方法開辟存儲(chǔ)空間咒锻,并調(diào)用對(duì)象的init方法初始化對(duì)象.
Person *p = [Person alloc] init];
Person *person = [Person new];
5.給成員變量賦值:
1> _age = 20;
2> p.age = 20;
3> [p setAge:20];
同時(shí)也可以在創(chuàng)建對(duì)象的時(shí)候就讓對(duì)象的成員變量初始化的值不為0,這時(shí)我們需要重寫init方法守屉,在init方法里給成員變量賦值惑艇,但是這里的值是固定的,也可以自定義構(gòu)造方法,自己傳遞參數(shù)拇泛,同時(shí)設(shè)置多個(gè)成員變量的屬性滨巴,方法名一般已initWith開頭
- (id)init
{
self = [super init];
if (self != nil)
{
_age = 20;
}
return self;
}
可以簡(jiǎn)寫成下面的寫法:
- (id)init
{
if ( self = [super init] )
{
_age = 20;
}
return self;
}
注意:一定要調(diào)用回super的init方法:初始化父類中聲明的一些成員變量和其他屬性,如果對(duì)象初始化成功,才有必要進(jìn)行接下來的初始化,返回一個(gè)已經(jīng)初始化完畢的對(duì)象
6.面向?qū)ο蟮娜筇匦?封裝俺叭,繼承恭取,多態(tài)
- set方法
1>封裝:set方法
2>作用:提供一個(gè)方法給外界設(shè)置成員變量值,可以在方法里面對(duì)參數(shù)進(jìn)行相應(yīng)過濾
3> 方法名必須以set開頭
4> set后面跟上成員變量的名稱熄守,成員變量的首字母必須大寫
5> 返回值一定是void
6> 一定要接收一個(gè)參數(shù)蜈垮,而且參數(shù)類型跟成員變量類型一致
7> 形參的名稱不能跟成員變量名一樣
例:
- (void)setAge : (int) newAge; // 方法聲明
- (void)setAge : (int) newAge // 方法實(shí)現(xiàn)
{
if (newAge <= 0)
{
newAge = 1; // 對(duì)傳入的參數(shù)進(jìn)行過濾
}
age = newAge;
}
- get方法:
1> 作用:返回對(duì)象內(nèi)部的成員變量
2> 肯定有返回值,返回值類型肯定與成員變量類型一致
3> 方法名跟成員變量名一樣
4> 不需要接收任何參數(shù)
封裝細(xì)節(jié):
1> 成員變量的命名規(guī)范:一定要以下劃線_開頭(下劃線可看作首字母)
作用:1.讓成員變量與get方法的名稱區(qū)分開 2.可以跟局部變量區(qū)分開裕照,一看到下劃線開頭的變量攒发,一般都是成員變量
例:
- (int) age; // 方法的聲明
- (int) age // 方法的實(shí)現(xiàn)
{
return age;
}
繼承:當(dāng)某個(gè)類繼承了父類就擁有了父類的所有成員變量和方法,同時(shí)也可以擴(kuò)充方法晋南,基本上所有的類都繼承NSObject惠猿,同時(shí)子類也也可以重寫父類的方法,父類必須聲明在子類的前面负间,子類不能擁有和父類相同的成員變量偶妖,調(diào)用某個(gè)方法時(shí),優(yōu)先去當(dāng)前類中找政溃,如果找不到趾访,就去父類中找
多態(tài): 簡(jiǎn)單來說就是父類的指針指向子類對(duì)象,但是父類類型的變量不能直接調(diào)用子類特有的方法董虱。必須強(qiáng)轉(zhuǎn)為子類類型變量后腹缩,才能直接調(diào)用子類特有的方法