iphone - 没有泄漏

时间:2010-06-24 01:35:03

标签: iphone ipad

这样做的正确方法是什么?

我有一个我将在几种方法上使用的数组。我将添加对象,获取值,替换值等。

今天我这样做:

我在.h上声明它,使用类似

的东西
NSMutableArray *myArray;

一旦应用程序启动,我就会在.m上声明它做类似

的事情
myArray = [[[NSArray alloc] init] retain];

如果我不添加保留,那么阵列将在某个时刻释放,应用程序将崩溃。但是在应用程序开始时分配数组并将其保持“打开”而不释放它会使乐器发出声音,指着我,称我为“泄密者”......

如何解决?这是正确的方法吗?你们怎么做这样的事情?

谢谢

2 个答案:

答案 0 :(得分:3)

alloc隐式将保留计数设置为1.通过发送retain消息,您将保留计数增加到2.为了取消分配对象,您需要释放它两次。如果不这样做会导致内存泄漏。

理想情况下,您应该使用init[[NSArray alloc] init]方法中创建对象,然后在dealloc方法中将其释放,如下所示:

- (void)dealloc {
    [myArray release];
    [super dealloc];
}

您可能还会发现这篇文章很有用:http://developer.apple.com/mac/library/documentation/cocoa/Conceptual/MemoryMgmt/MemoryMgmt.html

还有一件事:您将myArray声明为NSMutableArray,但将其实例化为NSArray。也许这会导致崩溃。

答案 1 :(得分:2)

您不应该保留刚刚创建的对象。你已经拥有它了。如果你说,“数组将在某个时候发布,应用程序将崩溃”,那就是你应该改变的代码。您的代码不应该释放您仍想要保留的对象。