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的成员?

  • 相关阅读:
    笔记-归并排序
    Repeated Substring Pattern
    Assign Cookies
    Number of Boomerangs
    Paint Fence
    Path Sum III
    Valid Word Square
    Sum of Two Integers
    Find All Numbers Disappeared in an Array
    First Unique Character in a String
  • 原文地址:https://www.cnblogs.com/wqlblogger/p/3127846.html
Copyright © 2011-2022 走看看