面向?qū)ο?/h2>

1、什么是對(duì)象

在學(xué)習(xí)語(yǔ)言的過(guò)程中,都會(huì)遇到兩個(gè)問題:面向過(guò)程和面向?qū)ο蟆?code>面向過(guò)程:分析出解決問題所需要的步驟,然后用函數(shù)把這些步驟一步一步的實(shí)現(xiàn),使用的時(shí)候一個(gè)一個(gè)一次調(diào)用就可以了。
面向?qū)ο?/code>:把構(gòu)成問題的事務(wù)分解成各個(gè)對(duì)象,然后協(xié)調(diào)各個(gè)對(duì)象之間的聯(lián)系和通信,建立對(duì)象的目的不是為了完成一個(gè)步驟,而是為了描述某個(gè)事務(wù)在整個(gè)解決問題的步驟中的行為。
那么什么是對(duì)象呢?此對(duì)象可不是說(shuō)男女相親時(shí)候的那個(gè)對(duì)象,而是泛指所有具體的事物,都可以稱之為對(duì)象。

2、什么是類?

類的定義:將具有相同屬性和共同行為的一組對(duì)象的集合放在一個(gè)單元中,就稱之為類。
比如說(shuō):白貓,黑貓,灰貓等等,它就屬于貓類。如果貓,狗,豬放在一起,可以抽象出動(dòng)物類。那么貓類就屬于動(dòng)物類的一個(gè)子類,而動(dòng)物類則成為貓類的父類。
類的屬性:對(duì)象或者實(shí)體所擁有的特征在類中表示為類的屬性。
例如:貓的顏色。
類的方法:對(duì)象執(zhí)行的操作成為類的方法。
例如:貓會(huì)抓老鼠。也就是說(shuō),對(duì)象的行為。

3、什么是封裝

在Objective-C中,一個(gè)對(duì)象是由很多屬性和方法組成的,將屬性和方法相結(jié)合,共同體現(xiàn)對(duì)象的特性,稱為封裝。封裝可以做到隱藏內(nèi)部實(shí)現(xiàn),穩(wěn)定外部接口。

4、類和對(duì)象的關(guān)系

它們的關(guān)系是,對(duì)象是類的實(shí)例,類是對(duì)象的模板。對(duì)象是通過(guò)new className產(chǎn)生的,用來(lái)調(diào)用類的方法;類的構(gòu)造方法 。
類不是憑空造出來(lái)的,一般是為了解決具體問題從現(xiàn)實(shí)中抽象出來(lái)的。

5、iOS中的類

創(chuàng)建一個(gè)mySchoolProject的項(xiàng)目,新添加一個(gè)學(xué)生類。

新添加的學(xué)生類.png

由圖可以看到,這個(gè)類有兩個(gè)文件:.h和.m文件。
在Objective-C中,類是由接口(interface)和實(shí)現(xiàn)(implemention)兩部分組成的。

@interface部分

1、#import指令
#import指令和C語(yǔ)言的#include指令類似,但是#import指令能避免頭文件被重復(fù)包含的問題。且#import<>包含iOS框架類庫(kù)里面類的頭文件,#import""包含項(xiàng)目里自定義類的頭文件。
2、實(shí)例變量
在Objective-C中,類的特征都是用變量來(lái)表示的,這種變量稱為實(shí)例變量(成員變量),聲明在@interface下的“{}”中。
3、方法聲明
在接口文件中的功能方法是沒有實(shí)現(xiàn)的,只是描述了類的行為應(yīng)有哪些,類似C中的函數(shù)原型;功能的實(shí)現(xiàn)要在.m文件中實(shí)現(xiàn)。并且Objective-C中的繼承語(yǔ)法是“類名:父類名”。

@implemention

實(shí)現(xiàn)部分中的方法分為:實(shí)例方法類方法,實(shí)例方法要實(shí)例化對(duì)象后通過(guò)對(duì)象進(jìn)行調(diào)用,實(shí)例方法允許調(diào)用實(shí)例方法和實(shí)例變量。以-開頭。
類方法:以+開頭,類方法可以調(diào)用類方法,但類方法不可以調(diào)用實(shí)例方法,但是類方法可以通過(guò)創(chuàng)建對(duì)象來(lái)訪問實(shí)例方法。
方法名又稱為選擇器。
類的命名規(guī)范
類名要首字母大寫,方法名首字母小寫,方法名中其他單詞首字母要大寫,以提高程序的可讀性。

創(chuàng)建和使用對(duì)象

//創(chuàng)建對(duì)象,完成對(duì)象的聲明,內(nèi)存分配,初始化
        Student *stu = [[Student alloc] init];
或者
Student *stu2 = [Student new];

Objective-C創(chuàng)建對(duì)象的語(yǔ)法:

類名 *對(duì)象名= [[類名 alloc] init];
類名 *對(duì)象名= [類名 new];

Objective-C中給對(duì)象屬性賦值:

stu1->name = @"張三";
        stu1->age = 15;

賦值語(yǔ)法:

對(duì)象名->實(shí)例變量名 = 具體值;

Objective-C中的方法

消息傳遞模型(Message passing):是Objective-C中的核心機(jī)制,在Objective-C中,沒有方法調(diào)用這種說(shuō)法,只有消息傳遞。
//重寫init方法

- (id)init{
    if(self = [super init]){
        name = @"李四";
        age = 17;
    }
    return self;
}

其中,if(self = [super init]),此處的[super init]仍然返回子類對(duì)象,目的是為了初始化父類的實(shí)例變量。如果返回nil,說(shuō)明父類沒有alloc成功。

便利初始化函數(shù)

在使用對(duì)象的過(guò)程中,對(duì)象和對(duì)象的實(shí)例變量的值往往是不同的,所以我們需要在init方法時(shí)傳入個(gè)性化的數(shù)據(jù),在框架類庫(kù)中的一些類里有一系列的以init開頭的方法,這些方法就是便利初始化函數(shù)。
在.h文件里聲明便利初始化函數(shù)

- (id)initWithName:(NSString *)aName andAge:(int)anAge;

在.m文件里實(shí)現(xiàn)便利初始化函數(shù)

- (id)initWithName:(NSString *)aName andAge:(int)anAge{
    if (self = [super init]) {
        name = [aName copy];
        age = anAge;
    }
    return self;
}

便利構(gòu)造器。

上面的便利初始化函數(shù)創(chuàng)建對(duì)象首先還是要調(diào)用alloc方法對(duì)對(duì)象分配內(nèi)存空間,然后再初始化對(duì)象,代碼還是非常繁瑣。于是在Cocoa中,有些方法通過(guò)吧內(nèi)存分配過(guò)程和初始化過(guò)程組合起來(lái)完成對(duì)象的創(chuàng)建,這種方法稱為--便利構(gòu)造器。它們都是類方法。
在.h文件里聲明便利初始化函數(shù)

+ (id)initWithName:(NSString *)aName andAge:(int)anAge;

在.m文件里實(shí)現(xiàn)便利初始化函數(shù)

//便利構(gòu)造器
+ (id)initWithName:(NSString *)aName andAge:(int)anAge{
    Student *student = [[Student alloc] initWithName:aName andAge:anAge];
    return student;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容