美文网首页
写一个便利构造器

写一个便利构造器

作者: 奕十八 | 来源:发表于2016-08-26 12:06 被阅读48次

    写一个便利构造器

    +(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,原因是通过便利构造器创建的对象不需要手动释放,它默认已经放入了自动释放池中,手动释放会引起过度释放从而崩溃。

    相关文章

      网友评论

          本文标题: 写一个便利构造器

          本文链接:https://www.haomeiwen.com/subject/ibfzsttx.html