国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

Objective-C學(xué)習(xí)_內(nèi)存管理學(xué)習(xí)筆記

2019-11-14 19:12:51
字體:
供稿:網(wǎng)友

 

內(nèi)存泄漏 : 應(yīng)當(dāng)廢棄的對(duì)象在超出生命周期后繼續(xù)存在

內(nèi)存管理 : 遵守配對(duì)原則,有alloc/new/copy/mutableCopy就要有相對(duì)應(yīng)的release或autorelease

原因 : Oc對(duì)象是在堆里面的(動(dòng)態(tài)分配),堆里面的內(nèi)存由我們程序員來管理 ;

 

對(duì)象操作

Objective –c 對(duì)應(yīng)方法

生成并持有對(duì)象

alloc/new/copy/mutableCopy等

持有對(duì)象

retain 方法

釋放對(duì)象

release方法

廢棄對(duì)象

dealloc方法(系統(tǒng)自動(dòng)調(diào))

   內(nèi)存管理的思考方式 (文中“自己”表示 : “對(duì)象的使用環(huán)境”或“開發(fā)人員”):

 

  1.自己生成的對(duì)象,自己持有

  2.非自己生成的對(duì)象,自己也能持有

  3.不再需要自己持有的對(duì)象時(shí)釋放

  4.非自己持有的對(duì)象無法釋放

 

總結(jié) :

1.調(diào)用alloc或是retain方法之后,引用計(jì)數(shù)值 + 1

2.調(diào)用release方法之后,引用計(jì)數(shù)值 - 1

3.當(dāng)引用計(jì)數(shù)值為0時(shí),調(diào)用dealloc方法廢棄對(duì)象

4.調(diào)用retianCount,可以返回引用計(jì)數(shù)器的個(gè)數(shù)

 

多對(duì)象內(nèi)存管理步驟:(使用@PRoperty就會(huì)生成下面的set方法)

1.在set方法中調(diào)用傳進(jìn)來的參數(shù) retain方法

   -(void)setRoom(Room*)room

  {

           if(_room != room){//判斷傳進(jìn)來的對(duì)象是否是當(dāng)前的對(duì)象

                  [_room relase];//釋放掉當(dāng)前的對(duì)象

    _room = [room retain];//引用新的對(duì)象,賦值

  }

2.在dealloc方法中調(diào)用release

-(void)dealloc 

{

  [_room release];  

  _room = nil;

  [super dealloc];

}

 

autorelease 使用方法:

  1. 生成并持有NSAutoreleasePool對(duì)象(@autoreleasePool)
  2. 調(diào)用已分配對(duì)象的autorelease實(shí)例方法(retainCount不會(huì)增加,只是放在釋放池中而已)
  3. 廢棄NSAutoreleasePool對(duì)象

 

#import和@class的使用 :

#import  :包含所有的信息,包含引用類的變量和方法

@class      : 可以簡(jiǎn)單地引用一個(gè)類(僅僅告訴編譯器,這個(gè)是一個(gè)類)

@class和#import的主要區(qū)別 : #import的內(nèi)容改變了就要拷貝一次。

如何使用 :

(1)在.H文件中使用@class

(2)在.M文件中是用得是#import,真正使用的時(shí)候才要#import

 

 

解決相互引用(retain): 一端用retain,一端用assign

 

常見知識(shí)點(diǎn)或注意點(diǎn): 

(1)剛創(chuàng)建一個(gè)對(duì)象的計(jì)數(shù)器就為1

(2)重寫deallloc方法的時(shí)候 : [super dealloc]必須放在最后面

(3)如果釋放了對(duì)象,把所指向的地址賦值為nil,可以防止野指針操作

(4)給空指針發(fā)送消息是不會(huì)出錯(cuò)的,沒有什么現(xiàn)象

(5)調(diào)用retain方法會(huì)返回對(duì)象本身

(6)指針賦值并沒有調(diào)用retain,需要手動(dòng)調(diào)用retain

(7)@property 生成set方法已經(jīng)實(shí)現(xiàn)了上面的set方法和get方法,assign是默認(rèn)的寫法

(8)取得一個(gè)非自己生成并自己持有的對(duì)象 : id obj=[NSMutableArray array];  持有對(duì)象 : [obj retain];(類方法里面自動(dòng)調(diào)了autorelease)

(9)如果使用非自己持有的對(duì)象,這個(gè)程序會(huì)崩潰。

(10)__weak (只能用于ios5以上):可以避免循環(huán)引用,__修飾的變量不持有對(duì)象

(11)占用內(nèi)存較大的不要放在autoreleasepool,性能問題

(12)重寫alloc 方法的時(shí)候一定要使用self,這樣子類也可以創(chuàng)建相對(duì)應(yīng)的對(duì)象

(13)instancetype,比id更加智能,可以在編譯的時(shí)候就可以發(fā)現(xiàn)問題

(14)如果直接使用   __weak UIView * view = [[UIView alloc]init];會(huì)發(fā)出警告 : Assigning retained object to weak variable……

(15)弱應(yīng)用優(yōu)點(diǎn) : 在持有某對(duì)象的弱引用的時(shí),若該對(duì)象被廢棄,則弱引用將會(huì)自動(dòng)失效且處于nil(被賦值的狀態(tài))相對(duì)于__unsafe_unretained更安全

(16)非OC對(duì)象是放在棧中,指針變量(4個(gè)字節(jié))存在棧中

  (17) A.h里#import “B”,B.h里#import “A”,導(dǎo)致錯(cuò)誤 (Unknown type name……)


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 孟州市| 香河县| 清镇市| 镇巴县| 遵化市| 方正县| 海安县| 平原县| 北辰区| 兴和县| 西藏| 通许县| 礼泉县| 织金县| 广汉市| 楚雄市| 晴隆县| 上犹县| 佛山市| 威海市| 霞浦县| 永年县| 盐边县| 平顺县| 呼图壁县| 芦山县| 阿图什市| 蓬莱市| 酒泉市| 泰来县| 远安县| 隆子县| 高邑县| 乐东| 大宁县| 贵定县| 东乡| 杨浦区| 陆丰市| 涞源县| 孝感市|