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初始化....上述声明中的任何人是否有任何意义......如果没有那么我请求请提供一段代码,以便我变得更加清楚...... .. 谢谢
两种情况都应该给你一个自动释放的对象.如果是,您就是所有者:
alloc.copy,如mutableCopy(返回的副本属于您,而不是您调用该copy方法的对象).retain编辑了.在所有其他情况下,您可以假设您不是所有者,并且您不需要释放该对象.
因此,如果您的getData方法没有返回自动释放的对象,您应该修改它.否则使用此代码的其他人将创建内存泄漏(您可能会以这种方式混淆自己).
问题编辑后编辑:
根据Objective-C中的命名约定,该getData方法应该返回一个自动释放的对象.所以它应该被编辑以返回一个自动释放的对象,如果它还没有.
如果要编辑阵列,则需要从中制作可变副本.你可以打电话[NSMutableArray arrayWithArray:[databaseClass getData]];或[[databaseClass getData] mutableCopy].在第一种情况下,数组会被自动释放,你是不是所有者,你就不会需要调用release它.在第二种情况下,您是所有者(根据copy规则),需要稍后发布.
| 归档时间: |
|
| 查看次数: |
59 次 |
| 最近记录: |