NSMutableArray:如何用数据填充它,释放它,再次填充数据

时间:2011-07-26 18:38:39

标签: iphone objective-c cocoa-touch nsmutablearray

我的应用程序中有一个NSMutableArray,我这样开始:

H-FILE

NSMutableArray *noteBookContent;
@property (nonatomic, retain) NSMutableArray *noteBookContent;

M-FILE

@synthesize noteBookContent;

然后我有一个方法,我打开一个txt文件并将其内容读入临时NSString并将此NSString切片到不同的位,然后将这些位放入NSMutableArray。像这样:

    NSString *tempTextOut = [NSString stringWithContentsOfFile:filePath
                                                          encoding:NSUTF8StringEncoding
                                                             error:&error];

self.noteBookContent = [[[tempTextOut componentsSeparatedByString: @"\n[DIVIDER]\n"] mutableCopy] autorelease];

我的大问题如果我重复相同的过程几次会发生什么。在我将新数据读入之前是否需要发布noteBookContent?是否存在数据混乱的可能性,例如如果一个noteBookContent有10个项目(全部称为FRUIT)而下一个noteBookContent有5个项目(全部称为SALAD),我最终可能会使用SALAD,SALAD,SALAD,SALAD,SALAD,FRUIT,FRUIT,FRUIT,FRUIT等。< / p>

很抱歉,如果这很明显,但我真的不明白当我将新数据读入已包含旧数据的NSMutableArray时会发生什么。

感谢您的解释!

2 个答案:

答案 0 :(得分:8)

在这种情况下,您实际上并没有更改数组的内容 - 您正在完全替换对象。 noteBookContent的旧值 - NSMutableArray实例 - 由属性赋值(.noteBookContent = ...)释放,并替换为由-mutableCopy调用创建的新的单独NSMutableArray。一种更有效的方法是:

[self.noteBookContent removeAllObjects];
[self.noteBookContent addObjectsFromArray:[tempTextOut componentsSeparatedByString: @"\n[DIVIDER]\n"]];

答案 1 :(得分:1)

您不需要做任何事情,因为您正在使用某个属性。此属性自动处理可变数组的内存管理。