封裝/代理/內(nèi)存管理

封裝

Set方法

在開(kāi)發(fā)過(guò)程中,考慮到安全性要求,我們一般不在成員變量名前面使用@public、@protected等關(guān)鍵字修飾,而是使用Set方法來(lái)為對(duì)象提供成員變量的值。在set方法的內(nèi)部也可以對(duì)一些不合理的賦值進(jìn)行篩選過(guò)濾。

Set方法的作用:為外界提供一個(gè)設(shè)置成員變量值的方法

命名規(guī)范:

(1)方法名必須以set開(kāi)頭

(2)Set后面跟上成員變量的名稱,首字母大寫(xiě)

(3)返回值一定是void

(4)一定要接收一個(gè)參數(shù),而且參數(shù)類型需要和成員變量的類型一致

(5)形參名不能和成員變量名一樣

Set方法的好處:

(1)不讓數(shù)據(jù)暴露在外,保證了數(shù)據(jù)的安全性

(2)對(duì)設(shè)置的數(shù)據(jù)進(jìn)行過(guò)濾

Set方法使用示例:

/*******Set方法的聲明:********/

/*******Set方法的聲明:********/


Get方法

Get方法的作用:為調(diào)用者返回對(duì)象內(nèi)部的成員變量

命名規(guī)范:

(1)一定有返回值,返回值的類型和成員變量的類型一致

(2)方法名和成員變量名一樣

(3)不需要接收任何參數(shù)

Get方法使用示例:

/******Get方法的聲明:******/

-(NSString*)getName;

-(NSString*)getSex;

-(NSInteger)getAge;

/******Get方法的實(shí)現(xiàn)*****/

-(NSString*)getName{

return_name;

}

-(NSString*)getSex{

return_sex;

}

-(NSInteger)getAge{

return_age;

}

self關(guān)鍵字

self在實(shí)例方法減號(hào)方法,使用代表調(diào)用對(duì)象

self在類方法加號(hào)方法中使用代表使用它的類

self的用途:

可以利用self->成員變量名訪問(wèn)當(dāng)前對(duì)象的內(nèi)部的成員變量(僅在對(duì)象方法中)

【self 方法名】;可以調(diào)用其他的對(duì)象方法或者是類方法

*********************************************************************************

?代理

Protocol(協(xié)議)

1.Protocol:就一個(gè)用途,用來(lái)聲明一大堆的方法(不能聲明成員變量),不能寫(xiě)實(shí)現(xiàn)。

2.只要某個(gè)類遵守了這個(gè)協(xié)議,就擁有了這個(gè)協(xié)議中的所有方法聲明。

3.只要父類遵守了某個(gè)協(xié)議,那么子類也遵守。

4.Protocol聲明的方法可以讓任何類去實(shí)現(xiàn),protocol就是協(xié)議。

5.OC不能繼承多個(gè)類(單繼承)但是能夠遵守多個(gè)協(xié)議。繼承(:),遵守協(xié)議(< >)

6.基協(xié)議:是基協(xié)議,是最根本最基本的協(xié)議,其中聲明了很多最基本的方法。

7.協(xié)議可以遵守協(xié)議,一個(gè)協(xié)議遵守了另一個(gè)協(xié)議,就可以擁有另一份協(xié)議中的方法聲明。

/*******第一步:*******/

首先建立兩個(gè)類:Boy和Girl

在Girl的.h文件中 實(shí)現(xiàn)第一步:聲明代理

/*****第二步****/

聲明代理:這里要注意協(xié)議用assign

第三步:代理人執(zhí)行協(xié)議方法

//第四步:簽訂協(xié)議

//第五步:成為代理人

//實(shí)現(xiàn)協(xié)議方法

1.協(xié)議的定義

@protocol 協(xié)議名稱<NSObject1qaqa>

方法聲明列表

@end;

2.如何遵守協(xié)議

(1)類遵守協(xié)議

@protocol 類名:父類名 <協(xié)議名稱1,協(xié)議名稱2>

@end

(2)協(xié)議遵守協(xié)議

@protocol 協(xié)議名稱 <其他協(xié)議名稱>

@end;

3.協(xié)議方法聲明中的關(guān)鍵字

(1)required (默認(rèn))要求實(shí)現(xiàn),若沒(méi)有實(shí)現(xiàn)則警告但不報(bào)錯(cuò)

(2)Optional 不要求實(shí)現(xiàn)

4.定義變量時(shí)遵守協(xié)議的限制

類名<協(xié)議名稱> *變量名 ? ?NSObject<.Myprotocol> *obj;

Id ?<協(xié)議名稱> ?變量名 ? id ?<.Myprotocol> obj1;

5.Property中聲明的屬性也可以做遵守協(xié)議的限制

@property (nonatomic ,strong ) 類名<協(xié)議名稱> *屬性名;

@property (nonatomic ,strong ) id<協(xié)議名稱> ?屬性名;

6.補(bǔ)充知識(shí):協(xié)議本身寫(xiě)在.h頭文件中,但也可以定義在任何地方。當(dāng)這個(gè)協(xié)議只有這個(gè)類使用遵守時(shí),一般把協(xié)議寫(xiě)在這個(gè)類里邊,當(dāng)這個(gè)協(xié)議需要多個(gè)類去實(shí)現(xiàn)時(shí),就寫(xiě)在外邊單獨(dú)的文件中。

內(nèi)存 管理

堆區(qū)內(nèi)存的三種常見(jiàn)問(wèn)題

1.野指針問(wèn)題:訪問(wèn)沒(méi)有所有權(quán)的內(nèi)存,如果想安全訪問(wèn),必須確??臻g還在

2.過(guò)度釋放:對(duì)同一塊空間多次釋放,程序立即crash

3.,內(nèi)存泄漏:空間使用之后沒(méi)有立即釋放,存在安全隱患.

內(nèi)存的三種管理機(jī)制

1.垃圾回收機(jī)制(gz):有系統(tǒng)來(lái)管理內(nèi)存,系統(tǒng)識(shí)別空間何時(shí)不使用,自動(dòng)回收空間,不適用于iOS開(kāi)發(fā),java采用該機(jī)制.

2.MRC:手動(dòng)引用技術(shù)機(jī)制,有開(kāi)發(fā)人員開(kāi)辟和釋放空間,并顯示添加引用計(jì)數(shù)的代碼,能夠靈活的決定內(nèi)存何時(shí)釋放.

3.ARC:自動(dòng)引用計(jì)數(shù)機(jī)制,是iOS 5.0推出的,也是蘋(píng)果默認(rèn)的內(nèi)存管理機(jī)制,本質(zhì)還是基于MRC,只不過(guò)是對(duì)于計(jì)數(shù)的修改是由系統(tǒng)自動(dòng)實(shí)現(xiàn)的.

內(nèi)存管理黃金法則:

如果你對(duì)一個(gè)對(duì)象做了alloc,copy,retain,操作之后你就擁有了對(duì)象的使用權(quán),你就有責(zé)任對(duì)它進(jìn)行release,或者autorelease.

簡(jiǎn)單理解:就看自己有沒(méi)有使用alloc,copy,retain,這三個(gè)方法,如果使用了就對(duì)應(yīng)上,release,或者autorelease.如果沒(méi)有使用,就和自己無(wú)關(guān),不用處理

使用注意:

自動(dòng)釋放池的創(chuàng)建和釋放遵循棧規(guī)則

調(diào)用autorelease方法不會(huì)對(duì)引用計(jì)數(shù)器產(chǎn)生影響

autorelease方法延遲了對(duì)象的釋放時(shí)間,占用內(nèi)存較大的對(duì)象不要使用

一個(gè)對(duì)象不能多次調(diào)用autorelease方法

一個(gè)對(duì)象不能同時(shí)使用autorelease方法和release方法

retainCount消息:獲得對(duì)象當(dāng)前的引用計(jì)數(shù)器

一旦對(duì)象被回收了.那么他占據(jù)的儲(chǔ)存空間就不再可用,堅(jiān)持使用就會(huì)導(dǎo)致程序崩潰(野指針錯(cuò)誤)

最后編輯于
?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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