以下哪种方式是初始化的好方法

saj*_*wan 0 iphone memory-leaks objective-c nsmutablearray

我是一个新的Objective-C程序员,有时与这种语言的所有权概念混淆....目前我正在学习iPhone编程....

以下是那些让我困惑的案例..

我正常使用这些(有时是第一次,有时是其他)

 NSMutableArray *array;     //Declared in header
Run Code Online (Sandbox Code Playgroud)

情况1

array1= [databaseClass getData];
Run Code Online (Sandbox Code Playgroud)

案例2

array1 = [NSMutableArray arrayWithArray:[databaseClass getData]]; 
Run Code Online (Sandbox Code Playgroud)

这里[databaseClass getData]返回一个nonAutoreleased对象数组..我只是想要符合其中任何一个是正确的?

如果没有那么请建议正确的....

编辑

我的意思是说[databaseClass getData]已经返回一个已分配的数组(我的意思是一个非自动释放的数组)现在我认为如果我想在我的课程中使用它我不需要分配我的数组(我已经测试了它并且它有效),在这里,我唯一的问题是关于array1初始化....上述声明中的任何人是否有任何意义......如果没有那么我请求请提供一段代码,以便我变得更加清楚...... .. 谢谢

Dar*_*ust 6

两种情况都应该给你一个自动释放的对象.如果是,您就是所有者:

  • 您通过分配了对象alloc.
  • 您通过包含单词的方法创建了对象的副本copy,如mutableCopy(返回的副本属于您,而不是您调用该copy方法的对象).
  • retain编辑了.

在所有其他情况下,您可以假设您不是所有者,并且您不需要释放该对象.

因此,如果您的getData方法没有返回自动释放的对象,您应该修改它.否则使用此代码的其他人将创建内存泄漏(您可能会以这种方式混淆自己).

问题编辑后编辑:

根据Objective-C中的命名约定,该getData方法应该返回一个自动释放的对象.所以它应该被编辑以返回一个自动释放的对象,如果它还没有.

如果要编辑阵列,则需要从中制作可变副本.你可以打电话[NSMutableArray arrayWithArray:[databaseClass getData]];[[databaseClass getData] mutableCopy].在第一种情况下,数组会被自动释放,你是不是所有者,你就不会需要调用release它.在第二种情况下,您所有者(根据copy规则),需要稍后发布.