传递NSMutableArray对象

时间:2020-03-06 14:41:19  来源:igfitidea点击:

我相信,我迷失在指针土地上。我已经明白了(代码语法可能会有些偏离,我不是在看上面带有此代码的机器……但是所有相关细节都是正确的):

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]是意思,或者如果我做对了。

EDIT2:Mike McMaster和Andy-你们可能是正确的。我这里没有代码(它在同事的机器上,他们已经待了一天),但是要用值填充数组,我们正在使用解码器(?)对象进行一些操作。

此功能的目的是从iPhone中打开一个文件,将该文件读入一个数组(这是我们在程序的上一次运行中保存的对象的数组)。那个"解码器"东西有一个将数据放入数组的方法。

伙计,我已经完全屠杀了。我真的希望大家都能跟随,并感谢建议。我们将对其进行更仔细地研究。

解决方案

NSMutableArray保留添加到其中的对象,但是我们保留了数组本身吗?

在这种情况下,我们不需要调用"保留"。 [[NSMutableArray alloc] init]创建保留计数为1的对象,因此只有在我们专门释放它之前,它才会被释放。

希望看到更多的代码。我认为到目前为止我们所发布的错误不大。

根据我们发布的代码,我同意Mike的观点,它看起来是正确的。除了发布用于调用函数并向数组添加项目的代码之外,我们还可以尝试在函数末尾(当它具有所有对象时)以及在返回后检查指针的内存地址。 (没有对象时)。我不确定为什么会有所不同,但是同样,这些项目也应该粘贴在数组中。

我们需要向我们展示更多有关如何将对象添加到数组中的信息,以帮助我们提供真正的帮助。

我见过很多人写这样的代码:

NSMutableArray *array = [[NSMutableArray alloc] initWithCapacity:0];

array = [foo bar];

这样做的人认为它"创建然后设置"了一个可变数组,但这根本不是它所做的。相反,它创建一个可变数组,将其分配给名为" array"的变量,然后将另一个可变数组分配给该变量。

因此,请确保我们不会混淆该变量所引用的对象。对象不是变量,而是通过变量进行交互的。

我们发布的代码应该可以正常工作。我们必须在解码器功能中做一些有趣的事情。

我们不应该保留该数组。它会自动通过init保留。如果保留它,则会泄漏内存。如果我们只是从目标c开始,请花一些时间并阅读"用于Cocoa的内存管理编程指南简介"。这将使我们免于头痛。

为什么要编写这么多代码来从文件中读取数组?该框架已经支持它:

+ arrayWithContentsOfFile:
  
  Returns an array initialized from the contents of a specified file.
  The specified file can be a full or
  relative pathname; the file that it
  names must contain a string
  representation of an array, such as
  that produced by the
  writeToFile:atomically: method.

因此,我们可以执行以下操作:

NSMuatableArray *myArray = [NSMutableArray arrayWithContentsOfFile:@"path/to/my/file"];

这是一种方便的方法,因此对象将自动释放。如果要保留它,请确保保留它。