ARC下的内存管理(二)对象及成员的引用关系
2013-06-08 23:42
295 查看
ARC下的内存管理(二)对象及成员的引用关系
程序清单2-1
下面“释放”weak对象的strong成员:
考虑以下输出各是什么:
观察结果
可见:弱对象的成员就是强对象成员本身
对比执行:
程序清单2-2
以上输出为:
进一步观察array中的值
程序清单2-3
原字符串对象并没有被释放
实际上由于strong属性的array存在,无论是将 myObjWeak还是 myObjStrong置空(=nil)都不能释放其中的string;
思考题:
将myObject放入array中,分别做weak和strong的引用,是否能通过引用释放array中的myObject的成员?
程序清单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的成员?
相关文章推荐
- iOS内存管理之:引用计数、ARC、自动释放池autoreleasepool和便捷方法之间的关系
- iOS内存管理之:引用计数、ARC、自动释放池autoreleasepool和便捷方法之间的关系
- iOS内存管理之:引用计数、ARC、自动释放池autoreleasepool和便捷方法之间的关系
- iOS内存管理之:引用计数、ARC、自动释放池autoreleasepool和便捷方法之间的关系
- 移动开发:iOS内存管理之:引用计数、ARC、自动释放池autoreleasepool和便捷方法之间的关系
- iOS内存管理之:引用计数、ARC、自动释放池autoreleasepool和便捷方法之间的关系
- 7.22通过对象的引用访问对象中的成员
- iOS 非ARC基本内存管理系列 2-多对象内存管理(2)
- 不管在不在arc下,object对象都有强引用、弱引用之分
- 细粒度依赖(一)通过数据字典找到数据库对象之间的引用关系
- 从JVM内存管理的角度谈谈静态方法和静态属性 和 java对象引用与JVM自动内存管理
- 被引用对象的类型而不是引用变量的类型决定了调用谁的成员方法
- 从JVM内存管理的角度谈谈静态方法和静态属性 和 java对象引用与JVM自动内存管理
- Java对象、对象引用关系及参数传递讨论
- 黑马程序员--03.面向对象--02.子类和父类成员变量的关系【个人总结】
- obj-c编程11:内存管理和ARC(自动引用计数)
- C++ 常量对象,成员函数,引用
- C++反汇编第四讲,反汇编中识别继承关系,父类,子类,成员对象
- iOS内存管理系列之一:对象所有权与引用计数
- C++中 const对象和非const对象与const成员的关系