美文网首页
OC引用计数

OC引用计数

作者: 尽斩桃花三千 | 来源:发表于2017-03-25 21:42 被阅读12次

    1.使用 alloc, new,copy,mutableCopy 生成的对象,自己生成并持有. 需要自己手动rretain和release

    2.如array,mutableArray这样生成的对象,非自己生成并持有.源码如:

    -(NSArray *)array{

    NSArray *array = [NSArray alloc]init];

    [array autoRelease];

    return array;

    }

    对象调用autoRelease后,会注册到autoReleasepool中,当pool结束时,会自动调用release释放对象.

    3.引用计数保存在对象的头部,可以使用retainCount取得, 当retainCount为0时,会调用dealloc废弃对象.

    4.autoRelease的对象,并不会立即释放,而是在pool被废弃的时候释放.   autoReleasepool就像一个括号,对象就像一个局部变量,当超出作用域,对象就会被释放掉.  整个app的主程序就是在autoReleasepool中运行的.

    5.如果嵌套生成autoReleasepool对象,理所当然的会使用内侧的对象.

    所有权修饰符

    1. __strong 指向并持有对象. 

    2.__weak 指向但不持有对象

    3.__unsaft__unretain 修饰的变量,不属于编译器的内存管理对象.  __unsaft__unretain修饰的对象,和__weak修饰的对象类似,并不会持有对象.    使用__unsafe_unretain

    4.ARC有效是,不能直接使用 autorelease   和NSAtutoReleasePool对象, 应该用 @autoreleasepool{........};  在@autoreleasepool{}的范围内,使用__autorelease 修饰对象,等价于在MRC情况下,调用 autorelease 方法

    属性声明                                        所有权修饰符

    assign,unsaft_unraetained              __unsafe__unretain

    copy ,retain ,string                           __strong

    weak                                                     __weak

    相关文章

      网友评论

          本文标题:OC引用计数

          本文链接:https://www.haomeiwen.com/subject/vtwphttx.html