传递NSMutableArray对象
我相信,我迷失在指针土地上。我已经明白了(代码语法可能会有些偏离,我不是在看上面带有此代码的机器……但是所有相关细节都是正确的):
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"];
这是一种方便的方法,因此对象将自动释放。如果要保留它,请确保保留它。