• 内存管理 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的)

  • 相关阅读:
    A Simple Problem with Integers-POJ3468 区间修改+区间查询
    致橡树
    OJ-Triangle
    Myeclipse+AJAX+Servlet
    opnet学习过程
    yii2在ubuntu下执行定时任务
    php创建文件夹后设置文件夹权限(转)
    “Request Entity Too Large” 上传图片出现大小限制
    慕课网,我的yii2学习笔记(基础篇)
    Yii2高级版本复制新项目出现问题解决(转)
  • 原文地址:https://www.cnblogs.com/ccpblo/p/6424786.html
Copyright © 2020-2023  润新知