传递NSMutableArray对象

时间:2008-09-24 20:51:07

标签: objective-c

我相信,我迷失在指针之地。我有这个(代码语法可能有点关闭,我没有看到机器上有这个代码......但所有相关的细节都是正确的):

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打开一个文件,将该文件读入一个数组(它是我们在之前的程序运行中保存的一组对象)。那个“解码器”的东西有一个将数据放入数组的方法。

伙计,我完全屠杀了这个。我真的希望你们都能效仿,并感谢你的建议。我们会仔细研究它。

5 个答案:

答案 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"];

这是一种方便的方法,因此该对象将自动释放。如果你想保留它,一定要保留这个。