以下哪种方式是初始化
我是一个新的Objective-C编程,有时混淆这种语言的那些所有权概念的好方法....目前我正在学习的iPhone编程....以下哪种方式是初始化
这里区分那些困惑我总是..
我通常使用这些(有时第一和有时其它)
NSMutableArray *array; //Declared in header
壳体1
array1= [databaseClass getData];
案例2
array1 = [NSMutableArray arrayWithArray:[databaseClass getData]];
这里[databaseClass getData]
返回一个对象nonAutoreleased阵列.. 我只想符合是他们的人是正确的?
如果没有的话,请提出正确的....
编辑
我的意思是说,[databaseClass getData]
已经返回我的阵列分配的,现在(我是指非自动释放阵列)我想我并不需要分配我的数组,如果我想在我的班级使用它(我已经测试这和它的作品),我在这里的唯一的问题是关于array1
初始化....难道上面的语句任何人作出任何感觉......如果没有,那么我请求提供一段代码,以使它对我更加清楚...... 谢谢
两个箱子应该给你一个自动释放的对象。如果您是所有者:
- 您通过
alloc
分配了对象。 - 您通过一个包含单词
copy
的方法创建了一个对象的副本,如mutableCopy
(返回的副本属于您,而不是您称为copy
方法的对象)。 - 你
retain
编它。
在所有其他情况下,您可以假定您不是所有者,也不需要释放对象。
因此,如果您getData
方法不返回一个自动释放的对象,因此它应该修改它。否则,其他使用此代码的人将会创建内存泄漏(并且您可能会以这种方式混淆自己)。
编辑问题后,得到了编辑:
根据Objective-C的命名惯例,getData
方法应该返回一个自动释放的对象。所以它应该被编辑来返回一个自动释放的对象,如果它还没有。
如果你要编辑的数组你需要从它使一个可变的副本。您可以致电[NSMutableArray arrayWithArray:[databaseClass getData]];
或[[databaseClass getData] mutableCopy]
。在第一种情况下,阵列是autoreleased,你是而不是所有者,你做不是需要调用release
就可以了。在第二种情况下,您的是所有者(按照copy
规则),并且需要稍后发布。
也许第二个意味着一个额外的方法调用,昂贵:-P – 2011-05-02 11:53:42
好的....请清楚我,在这里我使用[databaseClass getData],返回我一个分配的数组.....然后我的想法是我不应该再次分配我的数组...并且必须释放它,因为它现在是指向数据库类数组的指针 – sajwan 2011-05-02 11:54:55
@Praveen S:我不明白你的意思。我只列出了Objective-C的所有权规则,与“额外的方法调用”无关。 – DarkDust 2011-05-02 11:55:25