黑马程序员技术交流社区
标题:
数组release问题
[打印本页]
作者:
jiangenhao
时间:
2014-5-14 23:13
标题:
数组release问题
void arrayMemory() {
// 1
Student *stu1 = [[Student alloc] init];
Student *stu2 = [[Student alloc] init];
Student *stu3 = [[Student alloc] init];
NSLog(@"stu1:%zi", [stu1 retainCount]);
// 当把一个对象塞进数组中时,这个对象的计数器会加1,也就是说数组会对它做一次retain操作
// 2
NSArray *array = [[NSArray alloc] initWithObjects:stu1, stu2, stu3, nil];
NSLog(@"arrayretaincount=%zi", [array retainCount]);
NSLog(@"stu1:%zi", [stu1 retainCount]);
NSLog(@"arraycount=%zi", array.count);
NSLog(@"arrayretaincount=%zi", [array retainCount]);
// 1
[stu1 release];
[stu2 release];
[stu3 release];
NSLog(@"arrayretaincount=%zi", [array retainCount]);
// 数组被销毁的时候,会对内部的所有元素都做一次release操作
// 0
[array release];
// [array release];
NSLog(@"arrayretainCount=%zi", [array retainCount]);
}
复制代码
为什么最后一次[array retainCount]输出结果为1?
我调用了 [array release]; 应该把array销毁了 array应该不存在了 我打印出来结果却依然为1
作者:
一只小菜鸟
时间:
2014-5-15 13:07
虽然打印是1,但是对象已经被销毁了,你可以在delloc中查看,是否被销毁。
除非你将其赋值为nil会打印0之外,release到最后都是1.
@implementation Student
- (void)dealloc {
NSLog(@"DASD");
[super dealloc];
}
@end
int main(int argc, const char * argv[])
{
Student *stu = [[Student alloc] init];
[stu release];
NSLog(@"%zi", [stu retainCount]); //打印1,但是已经对象已经被销毁了
return 0;
}
复制代码
作者:
chain
时间:
2014-7-5 15:00
一只小菜鸟 发表于 2014-5-15 13:07
虽然打印是1,但是对象已经被销毁了,你可以在delloc中查看,是否被销毁。
除非你将其赋值为nil会打印0之外 ...
为何计数器不为0,对象会被销毁呢? 不是只有计数器为0,对象才会销毁嘛,求解释
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2