日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

Objective--C三大特性:封装,继承,多态(零碎笔记)

發(fā)布時(shí)間:2024/8/26 58 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Objective--C三大特性:封装,继承,多态(零碎笔记) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

OC中類的特性共有有三個(gè),它們分別是封裝、繼承和多態(tài)。

封裝:封裝就是對(duì)類中的一些字段,方法進(jìn)行保護(hù),不被外界所訪問(wèn)到,有一種權(quán)限的控制功能。

OC中有四種訪問(wèn)權(quán)限修飾符:@public、@protected、@private、@package

要注意的是:OC中的方法是沒(méi)有修飾符的概念的,這個(gè)和Java有很大的區(qū)別,一般都是公開(kāi)訪問(wèn)的,即public的,但是我們?cè)趺醋龅阶孫C中的一個(gè)方法不能被外界訪問(wèn)呢?

OC中是這么做的,如果想讓一個(gè)方法不被外界訪問(wèn)的話,只需要在.m文件中實(shí)現(xiàn)這個(gè)方法,不要在頭文件中進(jìn)行定義,說(shuō)白了就是:該方法有實(shí)現(xiàn),沒(méi)定義,這樣外界在導(dǎo)入頭文件的時(shí)候,是沒(méi)有這個(gè)方法的,但是這個(gè)方法我們可以在自己的.m文件中進(jìn)行使用。(和IOS中的單例模式有關(guān))

繼承:繼承是類中的一個(gè)重要的特性,他的出現(xiàn)使得我們沒(méi)必要?jiǎng)e寫(xiě)重復(fù)的代碼,可重用性很高。

1、成員變量的作用域。成員變量的作用域應(yīng)該也是封裝的一種,它對(duì)成員變量的作用范圍做出了一些限制。

@public : 在任何地方都可以直接訪問(wèn)成員變量。

@protected:在本類和子類中可以直接訪問(wèn)。

@private:只能在本類中訪問(wèn)。

@package:在同一個(gè)框架內(nèi)可以訪問(wèn)。

默認(rèn)情況下在類的聲明中定義的成員變量的修飾符是@protected,在類的實(shí)現(xiàn)中定義的成員變量的修飾符是@private。

總結(jié):(1)封裝是為了保護(hù)類中的屬性,不讓外界直接對(duì)屬性進(jìn)行訪問(wèn)和賦值。但是我們可以利用set和get來(lái)對(duì)屬性進(jìn)行賦值和取值。

(2)set方法里可以寫(xiě)上對(duì)屬性的判斷,以免我們輸入一些不合理的值給屬性。

(3)成員變量的作用域的修飾符有四種,默認(rèn)情況下在類的聲明中定義的成員變量的修飾符是@protected,在類的實(shí)現(xiàn)中定義的成員變量的修飾符是@private。

2、繼承有什么好處和壞處?

好處:1)我們可以明確的表示兩個(gè)類之間的關(guān)系。2)子類可以繼承父類的屬性和方法,提高了代碼的復(fù)用率。

壞處:會(huì)增加程序的耦合性。也就是說(shuō)當(dāng)有一天我們?nèi)绻麆h除了父類,那么子類也將不能再使用,這就是繼承的缺點(diǎn)。

3、繼承的注意點(diǎn):

1)父類必須聲明在子類的前面。

2)子類的不能重寫(xiě)成員變量,因?yàn)樽宇愔胁辉试S有跟父類同名的成員變量。

3)繼承不是兩個(gè)類有相同的屬性和方法就可以確定繼承關(guān)系的。比如說(shuō)狗中有名字和年齡屬性,還有跑和吃飯的方法,這些屬性和方法人也可以擁有,但是可以讓人繼承狗這個(gè)類嘛,所以繼承還要考慮事物之間的關(guān)系。

4、多態(tài)的特點(diǎn):

1)沒(méi)有繼承就沒(méi)有多態(tài)。

2)父類類型的變量不能直接調(diào)用子類的方法,必須要強(qiáng)制轉(zhuǎn)化為子類類型才可以。

3)如果函數(shù)和方法形參列表中是父類的類型,則可以傳入父類或子類的對(duì)象。

上面就是繼承和多態(tài)的介紹。

總結(jié):

(1)繼承是指一個(gè)類完全地?fù)碛辛硪粋€(gè)類的屬性和方法。

(2)繼承時(shí)子類可以重寫(xiě)父類的方法,如果要調(diào)用父類的方法,可以用super。

(3)繼承不可以亂用,我們要理解兩個(gè)類之間的關(guān)系,不是一個(gè)類有了另一類的屬性和方法就可以繼承的。

(4)繼承只允許單繼承,不能夠同時(shí)繼承多個(gè)類。

(5)多態(tài)是在繼承的基礎(chǔ)上實(shí)現(xiàn)的。

(6)多態(tài)可以在運(yùn)行時(shí)根據(jù)對(duì)象的類型動(dòng)態(tài)調(diào)用方法。

(7)多態(tài)不可以直接調(diào)用子類的屬性和方法。

內(nèi)存管理總結(jié):

1、OC中是需要進(jìn)行內(nèi)存管理的,內(nèi)存管理的范圍是任何OC對(duì)象。

2、有alloc就一定要有release,有retain就一定要有release。

3、引用計(jì)數(shù)器占用四個(gè)字節(jié),它是用來(lái)表示對(duì)象被引用的次數(shù)的,如果為0系統(tǒng)就會(huì)自動(dòng)釋放內(nèi)存。

4、對(duì)象引用另一個(gè)對(duì)象的時(shí)候,要在set方法里面寫(xiě)該對(duì)象的retain,在dealloc中寫(xiě)上該對(duì)象的release。

5、@property的參數(shù)有很多,對(duì)于基本數(shù)據(jù)類型的變量我們寫(xiě)上 nonatomic和assign,對(duì)于OC對(duì)象我們寫(xiě)上nonatomic和assign。其中nonatomic是高性能的意思,它用在多線程管理 上,assign是直接賦值的意思,retain是release舊值,retain新值的意思。

構(gòu)造方法的幾個(gè)重點(diǎn):

1、如果需要在初始化的時(shí)候就給成員變量賦值,我們就要重寫(xiě)init方法,也就是構(gòu)造方法。

2、重寫(xiě)構(gòu)造方法的時(shí)候一定要調(diào)用父類的構(gòu)造方法。

3、設(shè)計(jì)構(gòu)造方法的時(shí)候記得父類的屬性交給父類處理。

4、構(gòu)造方法必須是對(duì)象方法。

SEL其實(shí)是對(duì)方法的一種包裝,它是將方法包裝成一個(gè)SEL類型的數(shù)據(jù),根據(jù)這個(gè)數(shù)據(jù)我們可以找到對(duì)應(yīng)的方法地址。SEL也就是消息。下面我們根據(jù)SEL來(lái)調(diào)用對(duì)象的方法。

// Person類的實(shí)現(xiàn)

@implementation Person

- (void)eat

{

??? NSLog(@"%@在吃飯", _name);

}

@end

int main()

{

??? Person *p = [[Person alloc] init];

??? p.name = @"張三";

???

??? [p performSelector:@selector(eat)]; // 把方法名包裝成一個(gè)SEL類型的數(shù)據(jù)并進(jìn)行調(diào)用

???

??? return 0;

}

description是什么呢?它有兩種,一種是類方法,一種是對(duì)象方法。

1、使用NSLog和%@輸出某個(gè)對(duì)象時(shí),會(huì)調(diào)用對(duì)象的-description方法,并拿到返回值進(jìn)行輸出。返回值是:<類名: 對(duì)象地址>。

2、使用NSLog和%@輸出某個(gè)類對(duì)象時(shí),會(huì)調(diào)用類對(duì)象+description方法,并拿到返回值進(jìn)行輸出。返回值是:類名。

我們可以重寫(xiě)description方法來(lái)讓對(duì)象名和類對(duì)象名輸出我們想要的結(jié)果。比如說(shuō):

// Person類的實(shí)現(xiàn)

@implementation Person

- (void)eat

{

??? NSLog(@"%@在吃飯", _name);

}

?

// 重寫(xiě)description方法返回我們需要的東西

- (NSString *)description

{

??? return [NSString stringWithFormat:@"_name = %@", _name];

}

@end

?

int main()

{

??? Person *p = [[Person alloc] init];

??? p.name = @"張三";

???

??? NSLog(@"%@", p); // 輸出結(jié)果是:_name = 張三

???

??? return 0;

}

轉(zhuǎn)載于:https://www.cnblogs.com/songlei0601/p/5751193.html

與50位技術(shù)專家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的Objective--C三大特性:封装,继承,多态(零碎笔记)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。