zoukankan      html  css  js  c++  java
  • ARC下的内存管理(二)对象及成员的引用关系

    ARC下的内存管理(二)对象及成员的引用关系

    程序清单2-1

    myObjStrong = [[MyObject alloc] init];
    
    myObjStrong.strStrong = [array objectAtIndex:5];
    
    myObjStrong.strWeak = [array objectAtIndex:6];
    
    __weak MyObject *myObjWeak;    
    
    myObjWeak = myObjStrong; 

    下面“释放”weak对象的strong成员:

    myObjWeak.strStrong = nil;

    考虑以下输出各是什么:

    NSLog(@"weak object's stong member:%@", myObjWeak.strStrong);
    
    NSLog(@"strong object's strong member:%@", myObjStrong.strStrong);

    观察结果

     

     

    可见:弱对象的成员就是强对象成员本身

     

    对比执行:

    程序清单2-2

    myObjWeak.strWeak = nil;
    
    NSLog(@"weak object's weak member:%@", myObjWeak.strWeak);
    
    NSLog(@"strong object's strong member:%@", myObjStrong.strStrong);
    
    NSLog(@"strong object's weak member:%@", myObjStrong.strWeak);

    以上输出为:

     

    进一步观察array中的值

    程序清单2-3

    NSLog(@"string 5:%@",  [array objectAtIndex:5]);
    NSLog(@"string 6:%@", [array objectAtIndex:6]);

     

    原字符串对象并没有被释放

    实际上由于strong属性的array存在,无论是将 myObjWeak还是 myObjStrong置空(=nil)都不能释放其中的string;

    思考题:

    将myObject放入array中,分别做weak和strong的引用,是否能通过引用释放array中的myObject的成员?

  • 相关阅读:
    hdu 2709 Sumsets
    hdu 2004 成绩转换
    hihocoder 1043 完全背包
    hihocoder 1038 01背包
    hihocoder 1066 无间道之并查集
    并查集小结
    hdu 1232 畅通工程
    并查集学习2
    并查集知识学习
    js 禁止表单提交的方法(文件上传)
  • 原文地址:https://www.cnblogs.com/wqlblogger/p/3127846.html
Copyright © 2011-2022 走看看