zoukankan      html  css  js  c++  java
  • ios晋级之路-强引用和弱引用

    在objective-c的ARC模式中,请看以下代码

    id objc =[[NSObject alloc]init];

    这里id默认为强引用

    在强引用中,有时会出现循环引用的情况,这时就需要weak来帮忙啦

    int main(int argc, const char * argv[]) {

        id __weak obj0 = nil;

        @autoreleasepool {

            if (YES) {

                id obj1 = [[NSObject alloc]init];

                obj0 = obj1;

                NSLog(@"%@",obj0);

            }

            NSLog(@"%@",obj0);

        }

        return 0;

    }

    打印结果:

    2015-09-01 15:30:25.640 强引用测试[2166:153376] <NSObject: 0x100211f20>

    2015-09-01 15:30:25.642 强引用测试[2166:153376] (null)

    因为obj1生成的默认的为强引用(__strong),在超出if的作用域之后,obj1所持有的对象被释放,
    obj0为弱引用,所以obj0不持有对象,在obj1对象释放后,obj0自动的被赋值为nil
    弱引用的特性是,不持有对象,即便是写成id __weak obj1 = [[NSObject alloc] init];
    此代码系统会给与警告,因为这里obj1被声明成弱引用,那么在赋值之后,alloc出来的对象会被立即释放。
  • 相关阅读:
    spring 实现测试解耦
    Java 反射实例 (二)
    Java 反射实例
    Thread.join()
    缓存输入/输出流
    文件的拷贝
    将键盘输入的数据保存到文件中:OutputStream
    InputStream中read方法各个参数的意义
    OutputStream
    InputStream中的主要的子类
  • 原文地址:https://www.cnblogs.com/fanxinguu/p/4775843.html
Copyright © 2011-2022 走看看