您的位置:首页 > 其它

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

2013-06-08 23:42 295 查看
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的成员?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐