crash - NSMutableArray,removeFromArray和发行版,为什么会崩溃?

标签 crash nsmutablearray release memory-leaks

下面的方法用于清除空白页的日志。

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

相关文章:

build - 使用 msbuild 指定解决方案的项目文件

crash - 简单的 linux 设备驱动程序打开调用崩溃

c++ - 将 C++/Win32 控制台应用程序转换为 DLL 后崩溃

objective-c - 为什么我收到有关 NSMutableArray 不兼容指针类型的警告?

objective-c - enumerateObjectsUsingBlock : and for( in ) 之间的不同行为

c++ - Qt应用程序运行失败

c++ - Xcode C++ : Build in Debug but not Release

visual-studio-2010 - x64 上的 Visual Studio 2010 是否经常崩溃?或者只是在我的电脑上?

iphone - 使用可达性类检查互联网连接时应用程序崩溃

iphone - 同步 NSMutableArray 以实现线程安全?