写一个便利构造器
+(id)person{
Person *person = [[Person alloc]init];
return [person autorelease];
}
注意: 在ARC中不用写autorelease
执行以下代码,会输出什么?
NSString * name = [[NSString alloc]init];
name = @"Tom";
[name release];
- 答:会输出:Tom 在[name release]前后打印均有输出结果,但是会造成内存泄漏,原因是指针改变了指向,原先指向的区域变成了野指针,之后的释放,不能释放之前创建的区域。这里之所以在name释放之后还能打印,是因为release后name指向的地址仍然没有变,如果操作系统还没有把那一块内存回收,继续访问就不会报错,也就是悬空指针
NSDictionary *dict = [NSDictionary dictionaryWithObject :@"live" forkey:@"key"];
NSLog (@"%@",[dict objectForkey:@"key"]);
[dict release]
- 答:执行以上代码后,会先输出live 然后crash,原因是通过便利构造器创建的对象不需要手动释放,它默认已经放入了自动释放池中,手动释放会引起过度释放从而崩溃。
网友评论