写一个便利构造器

写一个便利构造器

+(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,原因是通过便利构造器创建的对象不需要手动释放,它默认已经放入了自动释放池中,手动释放会引起过度释放从而崩溃。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 内存管理 简述OC中内存管理机制。与retain配对使用的方法是dealloc还是release,为什么?需要与a...
    丶逐渐阅读 6,052评论 1 16
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,312评论 30 472
  • 多线程、特别是NSOperation 和 GCD 的内部原理。运行时机制的原理和运用场景。SDWebImage的原...
    LZM轮回阅读 6,091评论 0 12
  • ———————————————回答好下面的足够了---------------------------------...
    恒爱DE问候阅读 5,682评论 0 4
  • __block和__weak修饰符的区别其实是挺明显的:1.__block不管是ARC还是MRC模式下都可以使用,...
    LZM轮回阅读 8,687评论 0 6