我的应用程序中有一个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时会发生什么。
感谢您的解释!
答案 0 :(得分:8)
在这种情况下,您实际上并没有更改数组的内容 - 您正在完全替换对象。 noteBookContent
的旧值 - NSMutableArray实例 - 由属性赋值(.noteBookContent = ...
)释放,并替换为由-mutableCopy
调用创建的新的单独NSMutableArray。一种更有效的方法是:
[self.noteBookContent removeAllObjects];
[self.noteBookContent addObjectsFromArray:[tempTextOut componentsSeparatedByString: @"\n[DIVIDER]\n"]];
答案 1 :(得分:1)
您不需要做任何事情,因为您正在使用某个属性。此属性自动处理可变数组的内存管理。