插入大数据时停止在ARC中释放NSMutableArray

时间:2014-04-21 19:03:50

标签: objective-c nsmutablearray automatic-ref-counting

在我的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的数据很小,代码工作正常,但如果插入大数据则会释放,因此数据大小有问题!

2 个答案:

答案 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;
}