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

n.e*_*ind 1 iphone cocoa-touch objective-c nsmutablearray

我在我的应用程序中有一个NSMutableArray,我这样启动:

H-FILE

NSMutableArray *noteBookContent;
@property (nonatomic, retain) NSMutableArray *noteBookContent;
Run Code Online (Sandbox Code Playgroud)

M-FILE

@synthesize noteBookContent;
Run Code Online (Sandbox Code Playgroud)

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

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

self.noteBookContent = [[[tempTextOut componentsSeparatedByString: @"\n[DIVIDER]\n"] mutableCopy] autorelease];
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢你的解释!

Noa*_*oon 8

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

[self.noteBookContent removeAllObjects];
[self.noteBookContent addObjectsFromArray:[tempTextOut componentsSeparatedByString: @"\n[DIVIDER]\n"]];
Run Code Online (Sandbox Code Playgroud)