2014-04-21 61 views
-2

在我的ARC項目中,當在XML解析期間插入大數據時,會自動釋放NSMutableArray。在插入大數據時停止在ARC中釋放NSMutableArray

//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

任何示例代碼? – AndrewShmig

+0

@AndrewShmig補充:) – DeZigny

+0

這幾乎肯定是你的代碼中的一個問題。如果您不分享實際的代碼,我們將無法爲您提供幫助。 – Sulthan

回答

1

將您的數組定義爲「強」屬性,並且ARC應該在運行時保留它。除非特性「弱」,否則它不會自動釋放。也可能要指定一個「複製」屬性:

Objective-C declared @property attributes (nonatomic, copy, strong, weak)

這也是很好的做法,估計數爲初始化可變數組,所以編譯器大致知道你開始喂大的數據塊到它之前期待什麼從XML在運行時:

yourArray = [[NSMutableArray alloc] initWithCapacity:kYourBigNumber]; 
+0

感謝您試圖幫助:)不幸的是沒有任何2建議工作:/ – DeZigny

0

viewWillAppear是初始化實例變量,因爲它可以被稱爲一次以上貧瘠的地方。

相反初始化實例變量的類init方法:

- (id)initWithNibName:(NSString *)nibName 
       bundle:(NSBundle *)nibBundle { 
    self = [super initWithNibName:nibName 
          bundle:nibBundle]; 
    if (self) { 
     self.arrayData = [NSMutableArray new]; 
    } 
    return self; 
} 
+0

首先,感謝您的幫助:)第二,它沒有解決我的問題,仍然NSMutableArray得到釋放,如果大數據存儲裏面它:( – DeZigny