下面的方法用于清除空白页的日志。
// 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]
,并在分配/初始化NSMutableArray
实例时改用autorelease,也会发生崩溃。没有发布
pageToRemove
的代码可以工作,但是我看到了泄漏,而clang分析器也看到了。该代码是否泄漏?如果没有,为什么?
最佳答案
您的崩溃器中有错别字:
[pageToRemove release]; // this line makes the app crash
请注意,它说的是pageToRemove,而不是页面和 ToRemove。 ;)
关于crash - NSMutableArray,removeFromArray和发行版,为什么会崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4744923/