在我的ARC项目中,NSMutableArray在XML解析过程中插入大数据时自动释放。
//MainViewController.h:
@property (nonatomic, strong) NSMutableArray *arrayData;
//MainViewController.m:
viewWillAppear {
self.arrayData = [[NSMutableArray alloc] init];
}
-didEndElement {
[self.arrayData addObject:@"SomeData"]; //data inserted successfully
NSLog("count:%i",[self.arrayData count]); //count showing correctly
}
-numberOfRowsInSection{
return [self.arrayData count]; //return zero!
}
如何停止释放或保留它或增加缓冲区以接受大数据?
更新:如果插入NSMutableArray的数据很小,代码工作正常,但如果插入大数据则会释放,因此数据大小有问题!
答案 0 :(得分:1)
将数组定义为“强”属性,ARC应在运行时保留它。它不会自动释放,除非该属性“弱”。可能还想指定一个“复制”属性:
Objective-C declared @property attributes (nonatomic, copy, strong, weak)
使用估计计数初始化可变数组也是一种好习惯,因此编译器大致知道在运行时从XML开始向其中提供大数据块之前会发生什么:
yourArray = [[NSMutableArray alloc] initWithCapacity:kYourBigNumber];
答案 1 :(得分:0)
viewWillAppear
是一个初始化实例变量的好地方,因为它可能被多次调用。
而是在类init
方法中初始化实例变量:
- (id)initWithNibName:(NSString *)nibName
bundle:(NSBundle *)nibBundle {
self = [super initWithNibName:nibName
bundle:nibBundle];
if (self) {
self.arrayData = [NSMutableArray new];
}
return self;
}