程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> OC基礎:內存(內存管理)

OC基礎:內存(內存管理)

編輯:關於C語言

OC基礎:內存(內存管理)


自動釋放池:

@autoreleasepool {

}

 

內存管理機制 誰污染,誰治理

垃圾回收機制:gc(Garbage collection),由系統管理內存,開發人員不需要管理.

OC從版本2.0之後開始支持垃圾回收機制,但iOS開發平台不支持垃圾回收機制

 

繼承自NSObject的對象需要內存管理

OC中通過引用計數器管理內存

 

通過引用計數器管理內存的兩種方式

1.MRC:(maual reference count),手動引用計數,就是開發人員通過引用計數管理內存

2.ARC:(Automatic reference count),自動引用計數,由系統自動通過引用計數管理內存

ARC是基於MRC創建出來的

使用alloc生成對象的時候會將引用計數由0變為1

 

 

打印引用計數

retainCount:引用計數

打印retainCount 需要在ARC之下.

retainCount占4個字節

當retainCount變為0的時候,會自動調用dealloc方法.

 

-(void)dealloc{

NSLog(@"%@對象已經被銷毀",_name);

[superdealloc];//必須調用super的dealloc,且寫在最下面

}


 

僵屍對象:所占內存已經對回收的對象.僵屍對象不能再使用.

野指針:指向僵屍對象的指針.

 

空指針;沒有指向任何東西的指針(nil,NULL,0).如:per1=nil;

操作空指針不會報錯

 

alloc對應dealloc retain對應relase

 

 

autorelease和release的區別

1.autorelease相比release,也是對引用計數器執行減一操作,但不是立即減一,而是在未來的某個時刻減一(出了自動釋放池)

2.autorelease的實質;對一個對象使用autorelease操作,這個對象的引用計數不會立即減一,對象會被放到自動釋放池裡,待出了釋放池才減一

 

for (int i=0; i<1000000; i++) {

Person *person=[[Personalloc]init];//1

//數組會對添加的對象做一次引用計數+1

// 數組在釋放自己之前,會對之前添加的所有元素release操作(引用計數-1)

[array addObject:person];//2

[person release];//1

}

 

copy的使用:

對象使用copy的前提:這個類遵循了NSString ,且必須實現協議內的方法.

把某一內存區域的內容拷貝一份,拷貝到新的內存空間?去,被拷?區域的引?計數不變,新的內存區域的引用計數為1。

 

 


 

 

-(id)copyWithZone:(NSZone *)zone{

//淺拷貝:拷貝的是指針(地址)

// return [self retain];

 

//深拷貝:拷貝的是內容.

// 返回一個新的對象,跟原來的對象所占空間大小相同,空間內的內容也是相同的

Person *p=[[PersonallocWithZone:zone]init];

p.name=self.name;

return p;

}


 

 

 

new:申請內存並將retainCount從0變1

 

-------------------

 

//內存管理了原則

// +1:alloc,copy,new,retain

// -1:release,autorelease

// 一旦對象的引用計數器為0,系統會自動調用dealloc方法,之後就不能再對對象進行操作

// 誰污染誰治理


 

 

//自動釋放池的兩種形式

//1.

@autoreleasepool {

 

}

//2.自動釋放池的另一種形式(想當於自己建立的釋放池)

NSAutoreleasePool *pool=[[NSAutoreleasePoolalloc]init];

 

[pool release];


 

 

 

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved