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

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

iOS非ARC基本內存管理系列4-autorelease方法和@autoreleasepool

2019-11-14 20:37:21
字體:
來源:轉載
供稿:網友

1.autorelease 基本用法

  • 對象執行autorelease方法時會將對象添加到自動釋放池中
  • 當自動釋放池銷毀時自動釋放池中所有對象作release操作
  • 對象執行autorelease方法后自身引用計數器不會改變,而且會返回對象本身

2.autorelease 的優點

  • autorelease實際上只是把對release的調用延遲了,對于每一次autorelease系統只是把該對象放入了當前的autorelease pool中,當該pool被釋放時,該pool中的所有對象會被調用Release
  • 因為只有在自動釋放池銷毀的時候它里面的對象才銷毀,因此不用關心對象銷毀的時間也就不用關心什么時候調用release

 

3.autorelease 使用注意

  • 操作占用內存比較大的對象的時候不要隨便使用,擔心對象釋放的時間太遲
  • 操作占用內存比較小的對象可以使用

4.atureleasepool自動釋放池

自動釋放池存儲于內存中的棧中遵循"先進后出"原則

 

#import <Foundation/Foundation.h>#import "Person.h"int main(int argc, const char * argv[]){        // 自動釋放池1    @autoreleasepool {        
     // 對象的釋放交給 自動釋放池去管理 不用再寫[person release] Person
*person = [[[Person alloc] init] autorelease]; // 再創建一個自動釋放池2 @autoreleasepool { Person *person2 = [[[Person alloc] init] autorelease]; } Person *person3 = [[[Person alloc] init] autorelease]; } return 0;}

從上面的代碼可以看出:執行代碼時首先是person2對象先被銷毀,然后是外面的對象person和perons3 內存中的表現如下:

 

5.使用常見錯誤

 

   // 銷毀自動釋放池的時候 要對person再執行release操作的話 會報野指針錯誤    @autoreleasepool {        Person *person = [[[Person alloc] init] autorelease];        [person release];    }

 

    // 對象執行兩次autorelease意味著自動釋放池銷毀的時候 對象會執行兩次release操作 會報野指針錯誤    @autoreleasepool {        Person *person = [[[[Person alloc] init] autorelease] autorelease];    }

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宁蒗| 威海市| 雅江县| 广东省| 和田市| 安阳市| 资中县| 武宣县| 云南省| 高唐县| 自贡市| 高阳县| 翁牛特旗| 准格尔旗| 霍城县| 祁阳县| 海宁市| 绥德县| 阿拉善盟| 随州市| 泰州市| 永胜县| 德令哈市| 全椒县| 望江县| 来安县| 淮南市| 石景山区| 茌平县| 白城市| 扎兰屯市| 文水县| 长子县| 二连浩特市| 平阴县| 大城县| 理塘县| 改则县| 苏州市| 应城市| 澄江县|