NSMutableArray *tmp = [[NSMutableArray alloc] init];
我将它传递给另一个班级的例程
- (BOOL)myRoutine: (NSMutableArray *)inArray
{
// Adds items to the array -- if I break at the end of this function, the inArray variable has a count of 10
}
但是当代码返回到调用例程时,[tmp count]为0。
我必须错过一些非常简单而又非常基本的东西,但对于我的生活,我看不到它。谁能指出我做错了什么?
编辑:www.stray-bits.com问我是否保留了对它的引用,我说“也许......我们试过这个:NSMutableArray * tmp = [[[NSMutableArray alloc] init] retain]; not not确定这是你的意思,还是我做对了。 编辑:迈克麦克马斯特和安迪 - 你们可能是对的。我这里没有代码(它在同事的机器上并且它们已经离开了一天),但是为了用数值填充数组,我们正在使用解码器(?)对象。此功能的目的是从iPhone打开一个文件,将该文件读入一个数组(它是我们在之前的程序运行中保存的一组对象)。那个“解码器”的东西有一个将数据放入数组的方法。
伙计,我完全屠杀了这个。我真的希望你们都能效仿,并感谢你的建议。我们会仔细研究它。
答案 0 :(得分:2)
在这种情况下,您无需致电保留。 [[NSMutableArray alloc] init]创建保留计数为1的对象,因此在您专门发布之前它不会被释放。
看到更多代码会很高兴。我不认为错误是你到目前为止发布的非常小的数量..
答案 1 :(得分:2)
我同意Mike的观点 - 基于您发布的代码,它看起来是正确的。除了发布用于调用函数的代码并将项添加到数组之外,您还可以尝试在函数末尾检查指针的内存地址(当它包含所有对象时),并且一旦返回它(当它没有物体时)。我不确定为什么它会有所不同,但是这些项目也应该坚持在数组中。
答案 2 :(得分:2)
您需要向我们展示更多关于如何向阵列添加对象的信息,以便我们真正提供帮助。
我见过很多人写这样的代码:
NSMutableArray *array = [[NSMutableArray alloc] initWithCapacity:0];
array = [foo bar];
这样做的人认为它“创建并设置”一个可变数组,但这根本不是它的作用。相反,它创建一个可变数组,将其分配给名为array
的变量,然后为该变量分配一个不同的可变数组。
因此,请确保您不会将变量作为引用的对象混淆。该对象不是变量,它与通过变量进行交互。
答案 3 :(得分:1)
NSMutableArray保留添加到其中的对象,但是您是否保留了数组?
答案 4 :(得分:1)
您发布的代码应该有效。你必须在解码器功能中做一些有趣的事情。
您不应该保留该数组。它会自动保留在init中。如果你保留它,你会泄漏内存。如果您刚刚开始使用目标c,请花些时间阅读“Cocoa内存管理编程指南简介”。它会给你带来很多麻烦。
为什么要编写这么多代码来从文件中读取数组?它已经得到了框架的支持:
+ arrayWithContentsOfFile:
返回从指定文件的内容初始化的数组。 指定的文件可以是完整的或 相对路径名;它的文件 名称必须包含字符串 数组的表示,例如 由...产生的 writeToFile:atomically:method。
所以你可以这样做:
NSMuatableArray *myArray = [NSMutableArray arrayWithContentsOfFile:@"path/to/my/file"];
这是一种方便的方法,因此该对象将自动释放。如果你想保留它,一定要保留这个。