zoukankan      html  css  js  c++  java
  • 内存管理 Autorelease、retain、copy、assign的set方法和含义?

    1).你初始化(alloc/init)的对象,你需要释放(release)它。例如:

    NSMutableArray aArray = [[NSArray alloc] init]; 后,需要 [aArray release];

    2).你retain或copy的,你需要释放它。例如:

    [aArray retain] 后,需要 [aArray release];

    3).被传递(assign)的对象,你需要斟酌的retain和release。例如:

    obj2 = [[obj1 someMethod] autorelease];

    对象2接收对象1的一个自动释放的值,或传递一个基本数据类型(NSInteger,NSString)时:你或希望将对象2进行retain,以防止它在被使用之前就被自动释放掉。但是在retain后,一定要在适当的时候进行释放。

    关于索引计数(Reference Counting)的问题

    retain值 = 索引计数(Reference Counting)

    NSArray对象会retain(retain值加一)任何数组中的对象。当NSArray被卸载(dealloc)的时候,所有数组中的对象会 被 执行一次释放(retain值减一)。不仅仅是NSArray,任何收集类(Collection Classes)都执行类似操作。例如 NSDictionary,甚至UINavigationController。

    Alloc/init建立的对象,索引计数为1。无需将其再次retain。

    [NSArray array]和[NSDate date]等“方法”建立一个索引计数为1的对象,但是也是一个自动释放对象。所以是本地临时对象,那么无所谓了。如果是打算在全Class中使用的变量(iVar),则必须retain它。

    缺省的类方法返回值都被执行了“自动释放”方法。(*如上中的NSArray)

    在类中的卸载方法“dealloc”中,release所有未被平衡的NS对象。(*所有未被autorelease,而retain值为1的)

  • 相关阅读:
    详谈 Jquery Ajax 异步处理Json数据.
    基于Jquery+Ajax+Json+高效分页
    JSON资料整理
    站立会议第七天
    站立会议第六天
    站立会议第五天
    站立会议第四天
    用户场景分析
    站立会议第三天
    站立会议第二天
  • 原文地址:https://www.cnblogs.com/ccpblo/p/6424786.html
Copyright © 2011-2022 走看看