亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

iOS階段學習第20天筆記(MRC內存管理)

2019-11-14 18:42:57
字體:
來源:轉載
供稿:網友

iOS學習(OC語言)知識點整理

 

一、OC中的內存管理

1)概念:內存管理的對象為所有繼承了NSObject的對象,對基本數據(如:int 、float、double...)無效
      OC中采用引用計數器對內存做管理,他是一個整數數據,表示對象引用的次數,每個對象分配4字節
      的內存空間存放引用計數器當一個對象的引用計數器值為0時,它將被釋放,反過來說,如果一個對象的
      引用計數器值不為0,這個對象永遠不會被釋放,除非程序退出。

2) 當給對象發送一個retain消息,引用計數器值會+1,retain消息返回對象本身

3)當給對象發送一個release消息,引用計數器值為-1.

4)給對象發送一個retainCount消息,獲取引用計數值
 
5)當對象的引用計數器值為0,會被銷毀,內存空間會被釋放

6) 當對象被銷毀時,系統自動發送一個dealloc消息

7)一般重寫dealloc消息,釋放相關資源,一旦重寫dealloc方法,一定要調用[super dealloc];
      放在最后調用 不能直接調用dealloc方法

8)OC中的內存管理分為:MRC(Manual Reference Counting)手動引用計數
      ARC:Automatic Reference Counting:自動引用計數。
 
9)黃金法則 當使用alloc、new 、copy(mutableCopy)創建一個對象賦值給某個引用時后當不再使用這
      個引用時一定要發送release(autoRelease)消息 釋放該對象所占用的內存。

10)這里所講的內存管理為手動內存管理,新建項目是系統默認是自動內存管理的,所以需要手動設置,即在項目
      的Build  Settings 中找到 Objective-C Automatic Reference Counting 項設置為NO; 同時需要添加對野指
      針的監控 即在Edit Scheme 中找到并勾選 Enable Zoombie Objects 項。

11)內存管理操作 實例代碼:

  1、添加一個Person類 .h文件中不做任何操作

  2、在.m 文件中析構系統銷毀內存執行方法  例如: 

1 #import "Person.h"2 @implementation Person3 //析構系統銷毀內存執行方法4 -(void)dealloc{5      NSLog(@"Person dealloc");6 }7 @end 

  

3、在main文件中執行操作 例如:

 1 Person *p1=[[Person alloc]init];//引用計數器默認+1 2 [p1 retain]; //引用計數器+1 3  4 NSLog(@"retainCount:%ld",p1.retainCount);//結果:2 5 [p1 release];//引用計數器-1 6  7 //retainCount 獲取引用計數器的個數 8 NSLog(@"retainCount:%ld",p1.retainCount);//結果:1 9 [p1 release];p1=nil;//防止出現野指針,出現不安全因素 OC中可以給空指針對象發送消息10 NSLog(@"retainCount:%ld",p1.retainCount);//結果:0


12)在使用組合類是銷毀自身對象時需要先銷毀組合的對象 ,即在析構方法中銷毀組合對象 例如:

1  //Person 類中有一個Book 類 在Person類的.m文件中添加此方法2    -(void)dealloc{3         [_book release];4        NSLog(@"Person dealloc");5     }


13)組合類初始化時需要在父類中添加set方法用于在給組合類賦值時增加引用計數器個數 例如: 

1     //Person 類中Book類的賦值方法2      -(void)setBook:(Book*)book{3        book=[book retain];4      }5 6      //Person 類中Book類的取值方法7       -(Book*)book{8           return _book;9      }

 
14)數組中的內存管理:銷毀數組對象時需要先銷毀數組中存放的對象 例如:

 1 Book *b0=[[Book alloc]init]; 2 b0.ID=0; 3 NSMutableArray *array=[[NSMutableArray alloc]initWithObjects:b0, nil]; 4 [b0 release]; 5  NSLog(@"%ld",b0.retainCount); 6 for(int i=0;i<5;i++){ 7 Book *b=[[Book alloc]init]; 8 b.ID=i+1; 9 NSLog(@"before,book:%ld",b.retainCount);10 [array addObject:b];11 NSLog(@"after,book:%ld",b.retainCount);12 [b release];13 NSLog(@"release,book:%ld",b.retainCount);14 }15 NSLog(@"%ld",array.retainCount);16 [array removeLastObject];17 NSLog(@"*******");18 [array release];

15)數組對象中計數器的運行機制:

      1、當用對象創建數組時,數組會自動給對象的引用計數器+1

      2、將對象添加到數組時,數組會自動給對象的引用計數器+1

      3、將對象從數組中刪除時,數組會自動給對象發送release,將引用計數器值-1

      4、當數組release時,會自動給所有的元素發送release消息

 

16)循環引用的內存管理:針對循環引用時我們必須將其中一個對象類型由retain 改為assign 類型
       否則將無法徹底釋放內存。


 17)循環引用時可能會出現頭文件重復包含的問題 此時我們將#import  改為 @class  例如: @class Person; 


18)autorelease 自動釋放池 :將對象放入一個自動釋放池中,當自動釋放池被銷毀時,會給池子中
      所有的對象發送 release消息autorelease 方法返回對象本身給對象發送autorelease 消息后引用
      計數器值不變

 

19)創建自動釋放池有2種方法:

1 //方法一2 @autoreleasepool {}3 4 //方法二5 NSAutoreleasePool *pool=[[NSAutoreleasePool alloc]init];6 [pool release];

20)autorelease好處:不用擔心對象什么時候被釋放;缺點:當對象很大時,不能精確控制對象的釋放 ;能不用autorelease盡量不用.

 

21)自動釋放池 實例代碼:

 1 @autoreleasepool {  //自動釋放池的開始 2 Book *b1=[[Book alloc]init]; 3 b1=[b1 autorelease];//返回對象本身 4 NSLog(@"%ld",b1.retainCount); 5 b1.ID=1; 6 Book *b5=nil; 7 @autoreleasepool { 8 Book *b2=[[[Book alloc]init]autorelease]; 9 b2.ID=2;10  //[b2 release];//不能,已經有autorelease,在池子被銷毀時再次發送release消息,就會出錯11             12 //b5=[[[[Book alloc]init]autorelease]autorelease];13 //將同一個對象往自動釋放池中放入2次,池子被銷毀時會發送2次release消息,也會出現野指針錯誤14 b5=[[[Book alloc]init]autorelease];15 b5.ID=5;16 }17  //創建自動釋放池方法二:18 NSAutoreleasePool *pool=[[NSAutoreleasePool alloc]init];19         20 [pool release];21 //NSLog(@"id:%d",b5.ID);22         23 Person *p1=[Person personWithAge:20];24 //p1不需要release,p1的創建沒有alloc...關鍵字,已經在類方法中autoreleas過了25  //OC中有很多類提供了快速創建實例的類方法,都是autorelease的26         27 NSLog(@"*********");28 Student *stu=[Student personWithAge:29];29 stu.no=1001;30         31 }//自動釋放池結束

 

22)快速構建對象方法  例如: 

1 +(id)personWithAge:(int)newAge2 {3 // p1對象的釋放只能通過autorelease實現4 //子類繼承后也可以用此方法快速創建子類的對象,需要使用self5 //(發送消息的引用,如果是父類就是Person,如果是子類就是Student)6 Person *p1=[[[self alloc]init]autorelease];7 p1.age=newAge;8 return p1;9 }

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品夜色7777狼人| 欧美最猛性xxxxx(亚洲精品)| 青青草原成人在线视频| 国产精品一区二区电影| 色视频www在线播放国产成人| 大胆欧美人体视频| 狠狠躁夜夜躁人人爽天天天天97| 最近2019好看的中文字幕免费| 精品视频www| 日韩av电影在线免费播放| 5566日本婷婷色中文字幕97| 亚洲自拍偷拍第一页| 精品久久久久久国产| 97av在线视频免费播放| 91性高湖久久久久久久久_久久99| 自拍偷拍亚洲欧美| 欧美国产乱视频| 欧美极品美女视频网站在线观看免费| 色综合久久久888| 精品国产一区二区三区四区在线观看| 久久精品电影一区二区| 精品国产一区二区三区久久久狼| 日韩福利在线播放| 久久亚洲欧美日韩精品专区| 精品国产一区二区三区久久久狼| 亚洲国产第一页| 成人h片在线播放免费网站| 欧美—级a级欧美特级ar全黄| 91国产在线精品| 久久在精品线影院精品国产| 国产日韩亚洲欧美| 狠狠操狠狠色综合网| 欧美激情欧美激情在线五月| 精品国内产的精品视频在线观看| 日韩中文字幕在线免费观看| 久久久久久国产精品久久| 亚洲视频在线免费观看| 中日韩午夜理伦电影免费| 精品久久久视频| 久久精品国产亚洲一区二区| 亚洲最大av在线| 亚洲亚裔videos黑人hd| 久久久免费av| 亚洲91精品在线观看| 国产成人精彩在线视频九色| 97超碰蝌蚪网人人做人人爽| 欧美精品18videos性欧美| 国产成人一区二| 91在线色戒在线| 国产亚洲美女久久| 日韩精品中文字| 国产精品亚洲美女av网站| 久久精品视频中文字幕| 欧美性极品xxxx娇小| 日韩美女视频免费在线观看| 久久久999精品| 亚洲人成绝费网站色www| 成人福利网站在线观看| 91高清免费视频| 精品日韩中文字幕| 欧美电影在线免费观看网站| 欧美国产中文字幕| 日本午夜精品理论片a级appf发布| 日韩天堂在线视频| 中文字幕日韩欧美精品在线观看| 琪琪第一精品导航| 久久偷看各类女兵18女厕嘘嘘| 欧美性xxxx极品hd满灌| 欧美国产极速在线| 亚洲人成绝费网站色www| 久久精品免费电影| 91欧美精品成人综合在线观看| 国产成人精品一区二区三区| 日韩专区中文字幕| 日韩一区二区三区国产| 欧美性猛xxx| 欧美亚洲国产精品| 日韩av一区二区在线观看| 国产成人精品综合| 色综合久久精品亚洲国产| 精品国产福利视频| 日韩精品视频在线免费观看| 成人淫片在线看| 久久久久久噜噜噜久久久精品| 欧美成人午夜激情在线| 久久久久久网站| 亚洲精品日韩久久久| 色无极亚洲影院| 亚洲欧美综合区自拍另类| 亚洲va欧美va在线观看| 久久精品久久久久久国产 免费| 国产亚洲欧洲黄色| 91精品久久久久久久久| 成人黄色免费看| 亚洲国产精品一区二区久| 狠狠干狠狠久久| 亚洲欧美制服中文字幕| 亚洲成人精品在线| 国产精品91久久久久久| 欧美激情久久久| 中文国产成人精品| 中文字幕少妇一区二区三区| 亚洲成人网在线| 777国产偷窥盗摄精品视频| 国产精品美女在线| www.久久色.com| 日本亚洲欧美成人| 欧美乱大交做爰xxxⅹ性3| 日韩中文字幕国产| 欧美黄色性视频| 国产精品99久久久久久白浆小说| 91久久精品视频| 亚洲аv电影天堂网| 成人有码在线视频| 国产成人综合一区二区三区| 欧美黄色性视频| 亚洲在线观看视频网站| 高清日韩电视剧大全免费播放在线观看| 国产精品视频久久久久| 久热精品视频在线免费观看| 热草久综合在线| 精品视频在线播放| 色悠久久久久综合先锋影音下载| 久久91精品国产91久久跳| 少妇精69xxtheporn| 国产精品自拍视频| www.亚洲人.com| 色多多国产成人永久免费网站| 亚洲成av人影院在线观看| 亚洲国产日韩一区| 美女福利精品视频| 日本一欧美一欧美一亚洲视频| 成人性教育视频在线观看| 色婷婷综合久久久久| 亚洲黄色免费三级| 亚洲性无码av在线| 国产在线999| 91tv亚洲精品香蕉国产一区7ujn| 久久久免费av| 欧美大全免费观看电视剧大泉洋| 日韩欧美国产视频| 欧美日产国产成人免费图片| 久久久久成人精品| 日韩一区二区三区xxxx| 日韩av色在线| 欧美激情国产高清| 欧美日韩在线观看视频| 成人欧美在线观看| 亚洲最新av在线| 欧美日韩中国免费专区在线看| 97免费中文视频在线观看| 亚洲乱码一区av黑人高潮| 亚洲美女喷白浆| 国内成人精品视频| zzijzzij亚洲日本成熟少妇| 欧美激情国产日韩精品一区18| 亚洲精品国产美女| 国产伊人精品在线| 欧美激情中文网| 日韩电影免费观看在线| 日韩av中文字幕在线播放| 5566日本婷婷色中文字幕97| 日韩免费观看网站| 国产精品视频精品视频|