所以我正在尝试修复这个非常烦人的错误。如果我像使用 NSPredicate 的理想版本一样过滤我的数组,我将得到 EXC_BAD_ACCESS,因为它会尝试在作为委托传入的对象上调用 release 额外时间。如果我使用工作版本进行过滤,它可以正常工作。我认为这两个实现是相同的。我哪里错了?我知道谓词方式是要走的路,只是不能让它正常工作。
// 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
为空,问题仍然存在。