美文网首页
iOS引用计数式内存管理的四种思考方式

iOS引用计数式内存管理的四种思考方式

作者: 上官小五 | 来源:发表于2017-03-06 17:49 被阅读0次

    一:四种方式

        1.自己生成的对象,自己持有

        2.非自己生成的对象,自己也能持有

        3.不再需要自己持有的对象时释放

        4.无法释放非自己持有的对象

    二:四种方式详解

        1.自己生成的对象,自己持有:

        通过alloc,new,copy,mutableCopy方法生成的对象为自己生成并持有

        id obj = [[NSObject alloc] init];

        2.非自己生成的对象,自己也能持有

        用alloc,new,copy,mutableCopy以外的方法取得的对象,自己不持有该对象.调用retain方法后才持有该对象

        // 取得对象存在,但自己不持有该对象

        id object = [NSMutableArray   array];

        // 自己持有对象

        [obj  retain];

        3.不再需要自己持有的对象时释放

        3.1 情况一:  // 自己生成并持有对象 

        id obj = [[NSObject alloc] init];

        // 释放对象(指向对象的指针仍然被保留在变量obj中,貌似能够访问,但对象一经释放绝对不可访问)

        [obj release];

        3.1 情况二:  // 非自己生成并持有对象

        // 取得对象存在,但自己不持有该对象

        id object = [NSMutableArray  array];

        // 自己持有对象

        [obj  retain];

        // 释放对象

        [obj release];

        注意: 1. release是立即释放; 2. autorelease不立即释放,注册到autoreleasepool中,等到       pool结束时再调用release释放对象.

        4.无法释放非自己持有的对象

    4.1 取得对象存在,并持有对象时释放

    id obj = [[NSObject alloc] init];

    // 释放对象

    [obj release];

    // 释放对象之后再次释放(此时由于对象已经被释放,所以现在不持有该对象,这时再次释放会导致崩溃)

    [obj release];

    4.1 取得对象存在,但不持有对象时释放

    // 取得对象存在,但自己不持有该对象

    id object = [NSMutableArray  array];

    [obj  release]; // 由于此时释放了自己不持有的对象,会造成崩溃

    相关文章

      网友评论

          本文标题:iOS引用计数式内存管理的四种思考方式

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