[objective-c]内存泄漏与对象释放的最佳实践

标签: Xcode Objective-C
发布时间: 2017/3/27 3:04:43
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

泄漏︰

 + ( myDetails* ) initEmptySlideDetails { //ok
    myDetails* theObject = [[myDetails alloc] init];
    theObject.ID = 0;
    return theObject;
}

问题 1︰ 这是返回一个对象,我也想要释放以避免内存泄漏的正确方法吗?

无泄漏︰

+ ( myDetails* ) initEmptySlideDetails { //ok
        myDetails* theObject = [[myDetails alloc] init];
        theObject.ID = 0;
        return [theObject autorelease];
    }

问题 2︰ 在使用该对象时,做我需要强制保留吗?(由于 autorelease)。

myDetails* myDetails = [myDetails initEmptySlideDetails];

希望我说清楚我...:)

解决方法 1:

你得到警告的第一个示例中的泄漏的原因是一种命名约定。一般来说,类方法开头 new 预计将返回一个保留对象和大多数其他类方法预计将返回一个 autoreleased 对象。因为你的方法不是以开始 new ,但您正在返回保留对象、 分析仪认为,你将要泄漏的对象。这里提出的解决方案是给您的方法更好的名字,比如︰

+ (MyDetails *) newMyDetails;

还有几个其他公约,您没有追随 (和你大概应该)。

  1. 开头的任何方法 init 是初始值设定项。它应该是实例方法,它应该返回或 self 或另一个初始值设定项的结果。如何正确地创建 init 方法阅读苹果的文档
  2. 类名称总是以大写字母开头。您的类应该被命名为 MyDetails
赞助商