gpt4 book ai didi

cocoa - NSPredicate 内存问题

转载 作者:行者123 更新时间:2023-12-03 16:21:51 24 4
gpt4 key购买 nike

所以我正在尝试修复这个非常烦人的错误。如果我像使用 NSPredicate 的理想版本一样过滤我的数组,我将得到 EXC_BAD_ACCESS 因为它尝试额外调用作为委托(delegate)传入的对象的释放。如果我使用工作版本进行过滤,则效果很好。我认为这两个实现是相同的。我哪里错了?我知道谓词方式是可行的方法,只是无法让它正常工作。

// 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 是一个 ivar。 MYFoo 类有一个委托(delegate)属性,即 assign。即使 foos 为空,该问题仍然会发生。

最佳答案

在 PredicateTestViewController 的 dealloc 方法中,您应该释放 foo,而不是释放它们。

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

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

关于cocoa - NSPredicate 内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1689636/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com