NSPredicate内存问题

时间:2009-11-06 19:06:48

标签: cocoa memory-management nspredicate

所以我试图修复这个非常讨厌的bug。如果我像使用NSPredicate的理想版本一样过滤我的数组,我将获得EXC_BAD_ACCESS,因为它试图在作为委托传入的对象上调用释放额外的时间。如果我使用工作版过滤,它可以正常工作。我认为这两个实现是相同的。我哪里错了?我知道谓词方式是要走的路,只是不能让它正常工作。

// Ideal version
- (NSArray *)foosWithDelegate:(id)delegate {
    return [foos filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"delegate = %@", delegate]];
}

// Working version
- (NSArray *)foosWithDelegate:(id)delegate {
    NSMutableArray *results = [[NSMutableArray alloc] init];
    for (MYFoo *foo in foos) {
        if (foo.delegate == delegate) {
            [results addObject:foo];
        }
    }

    if ([results count] == 0) {
        [results release];
        return nil;
    }

    return [results autorelease];
}

foos是一个伊娃。 MYFoo类具有委托属性assign。即使foos为空,问题仍然存在。

1 个答案:

答案 0 :(得分:1)

在PredicateTestViewController的dealloc方法中,你应该释放foos,而不是解除分配它们。

// Your code in PredicateTestViewController.m
- (void)dealloc
{
    [foos dealloc];
    [super dealloc];
}

// Your new code in PredicateTestViewController.m
- (void)dealloc
{
    [foos release];
    [super dealloc];
}