以下方法用於在最後清理其空白頁的日誌。NSMutableArray,removeFromArray和release,爲什麼會崩潰?
// self.pages property declaratioN, this is on the header
@property(nonatomic, retain) NSMutableArray *pages;
// method that crashes
- (void)cleanup {
NSMutableArray *pagesToRemove = [[NSMutableArray alloc] init];
for (int n = [self.pages count]-1; n >= 0; n--) {
JournalPage *page = [self.pages objectAtIndex:n];
if (![page isEmpty]) {
break;
} else {
if (([self.pages count] - ([pagesToRemove count] + 1) > 2)) {
[pagesToRemove addObject:page];
} else {
break;
}
}
}
if ([pagesToRemove count] % 2 != 0) {
[pagesToRemove removeLastObject];
}
[self.pages removeObjectsInArray:pagesToRemove];
[pagesToRemove release]; // this line makes the app crash
}
釋放pagesToRemove
導致崩潰。如果我刪除[pageToRemove release]
,崩潰也會發生,並且在alloc/init NSMutableArray
實例時使用autorelease。
不釋放pageToRemove
代碼工作,但我看到了泄漏,並鐺分析器也看到它。
此代碼是否泄漏;如果不是,爲什麼?
頁面本身是否有可能被過度釋放?所以基本上,一旦你從self.pages中刪除它們,它們基本上被銷燬,然後當pagesToRemove被釋放時,它們會得到額外的釋放信息並導致崩潰。這是我的猜測,完全基於這裏介紹的內容。所以看看你是如何創建頁面對象本身。 – 2011-01-20 08:44:05