自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

iOS基本內(nèi)存管理:autorelease和autoreleasepool

移動(dòng)開(kāi)發(fā) iOS
在內(nèi)存管理的Objective-C代碼里,一個(gè)Cocoa對(duì)象存在于一個(gè)生命周期,有明確的階段。它被創(chuàng)建,初始化,并使用(也就是,其它對(duì)象發(fā)送消息給它)。它還可能會(huì)被保留,拷貝,或壓縮,并最終被釋放和銷毀。

[[109762]]

1.autorelease 基本用法

  • 對(duì)象執(zhí)行autorelease方法時(shí)會(huì)將對(duì)象添加到自動(dòng)釋放池中
  • 當(dāng)自動(dòng)釋放池銷毀時(shí)自動(dòng)釋放池中所有對(duì)象作release操作
  • 對(duì)象執(zhí)行autorelease方法后自身引用計(jì)數(shù)器不會(huì)改變,而且會(huì)返回對(duì)象本身

2.autorelease 的優(yōu)點(diǎn)

  • autorelease實(shí)際上只是把對(duì)release的調(diào)用延遲了,對(duì)于每一次autorelease系統(tǒng)只是把該對(duì)象放入了當(dāng)前的autorelease pool中,當(dāng)該pool被釋放時(shí),該pool中的所有對(duì)象會(huì)被調(diào)用Release
  • 因?yàn)橹挥性谧詣?dòng)釋放池銷毀的時(shí)候它里面的對(duì)象才銷毀,因此不用關(guān)心對(duì)象銷毀的時(shí)間也就不用關(guān)心什么時(shí)候調(diào)用release

3.autorelease 使用注意

  • 操作占用內(nèi)存比較大的對(duì)象的時(shí)候不要隨便使用,擔(dān)心對(duì)象釋放的時(shí)間太遲
  • 操作占用內(nèi)存比較小的對(duì)象可以使用

4.atureleasepool自動(dòng)釋放池

自動(dòng)釋放池存儲(chǔ)于內(nèi)存中的棧中遵循"先進(jìn)后出"原則

  1. #import <Foundation/Foundation.h> 
  2. #import "Person.h" 
  3. int main(int argc, const char * argv[]) 
  4.      
  5.     // 自動(dòng)釋放池1 
  6.     @autoreleasepool { 
  7.          
  8.      // 對(duì)象的釋放交給 自動(dòng)釋放池去管理 不用再寫(xiě)[person release] 
  9.         Person *person = [[[Person alloc] init] autorelease];  
  10.          
  11.         // 再創(chuàng)建一個(gè)自動(dòng)釋放池2 
  12.         @autoreleasepool { 
  13.              
  14.             Person *person2 = [[[Person alloc] init] autorelease]; 
  15.         } 
  16.         
  17.         Person *person3 = [[[Person alloc] init] autorelease];    
  18.     } 
  19.     return 0; 

從上面的代碼可以看出:執(zhí)行代碼時(shí)首先是person2對(duì)象先被銷毀,然后是外面的對(duì)象person和perons3 內(nèi)存中的表現(xiàn)如下:

5.使用常見(jiàn)錯(cuò)誤

  1. // 銷毀自動(dòng)釋放池的時(shí)候 要對(duì)person再執(zhí)行release操作的話 會(huì)報(bào)野指針錯(cuò)誤 
  2.     @autoreleasepool { 
  3.         Person *person = [[[Person alloc] init] autorelease]; 
  4.         [person release]; 
  5.     }
  1. // 對(duì)象執(zhí)行兩次autorelease意味著自動(dòng)釋放池銷毀的時(shí)候 對(duì)象會(huì)執(zhí)行兩次release操作 會(huì)報(bào)野指針錯(cuò)誤 
  2.     @autoreleasepool { 
  3.         Person *person = [[[[Person alloc] init] autorelease] autorelease]; 
  4.     } 

 

責(zé)任編輯:閆佳明 來(lái)源: cnblogs
相關(guān)推薦

2010-07-20 08:50:00

autoreleaseObjective C

2011-07-21 09:32:07

Objective-C 內(nèi)存 Autoreleas

2011-08-16 17:43:47

Objective-C內(nèi)存管理Autorelease

2018-07-23 09:26:08

iOS內(nèi)存優(yōu)化

2017-03-07 10:15:35

iOS內(nèi)存管理開(kāi)發(fā)

2011-08-05 16:41:48

iOS 隊(duì)列 內(nèi)存

2011-07-21 17:40:43

iOS 多核 內(nèi)存

2011-08-22 11:07:16

IOS 開(kāi)發(fā)多核內(nèi)存

2016-04-11 09:30:49

內(nèi)存管理ios開(kāi)發(fā)

2017-02-09 21:24:22

iOS內(nèi)存管理

2015-03-13 09:30:23

iOS內(nèi)存管理

2011-07-21 14:42:45

iOS UIViewCont 內(nèi)存

2023-10-18 13:31:00

Linux內(nèi)存

2015-06-25 09:47:20

iOS內(nèi)存管理

2013-04-11 13:57:27

Objective-CiOS開(kāi)發(fā)內(nèi)存管理

2016-03-03 10:07:39

ios內(nèi)存管理面試總結(jié)

2013-10-12 11:15:09

Linux運(yùn)維內(nèi)存管理

2011-07-21 09:42:27

Objective-C 內(nèi)存 Autoreleas

2023-08-31 00:02:28

2010-09-13 08:58:47

自動(dòng)釋放便捷方法內(nèi)存管理
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)