objective c - 使用类方法创建的警告“对象的潜在泄漏”

时间:2011-07-20 00:50:57

标签: iphone memory-leaks ios4

我正在将XCode 4.0.2用于iOS4项目。

我有这个构造对象的类方法。这是我从应用程序的开始到结束偶尔需要的常量。

enter image description here

但是,运行Analyze工具会给我一个c对象的“潜在的对象泄漏”警告。

我应该担心吗?我该如何解决?

谢谢

2 个答案:

答案 0 :(得分:4)

您应该阅读Apple提供的Memory Management Programming Guide

您应该在方法名称(此实例中为+[XYZ A])前加new作为前缀,以明确方法的调用者知道他们负责释放他们收到的对象。您可以将方法重命名为+[XYZ newA]

如果您不想重命名方法,至少应该返回一个自动释放的对象,例如:将最后一行更改为return [c autorelease];

答案 1 :(得分:3)

每次使用该方法时,它都会通过(不推荐使用的)XYZ方法创建+new的新实例。

如果您希望类XYZ的单个对象持续到应用程序的末尾,则需要进行一些更改。最简单的方法是在类初始化时创建此对象。在我们正在查看的任何类的.m文件中,添加以下内容:

static XYZ *instance = nil;

+ (void)initialize {
    if (self != [ThisClass class])
        return;

    instance = [[XYZ alloc] init];
    instance.X = ...;
    instance.Y = ...;
    instance.Z = ...;
}

然后,您的A方法:

+ (XYZ *)A {
    return instance;
}