这样做的正确方法是什么?
我有一个我将在几种方法上使用的数组。我将添加对象,获取值,替换值等。
今天我这样做:
我在.h上声明它,使用类似
的东西NSMutableArray *myArray;
一旦应用程序启动,我就会在.m上声明它做类似
的事情myArray = [[[NSArray alloc] init] retain];
如果我不添加保留,那么阵列将在某个时刻释放,应用程序将崩溃。但是在应用程序开始时分配数组并将其保持“打开”而不释放它会使乐器发出声音,指着我,称我为“泄密者”......
如何解决?这是正确的方法吗?你们怎么做这样的事情?
谢谢
答案 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)
您不应该保留刚刚创建的对象。你已经拥有它了。如果你说,“数组将在某个时候发布,应用程序将崩溃”,那就是你应该改变的代码。您的代码不应该释放您仍想要保留的对象。