我想从一个SKSpriteNode数组中提取与预定终止帧相交的元素。我可以通过迭代来做到这一点:
for (SKSpriteNode* Object in Array) {
if (CGRectIntersectsRect(Frame,Object.frame)) {
//extraction code
}
}
然而,这种方法的性能似乎很差,有没有办法以更快的方式进行此操作?我尝试过这样的事情:
NSPredicate *Predicate = [NSPredicate predicateWithFormat:@"CGRectIntersectsRect(Frame,SELF.frame)"];
NSArray *Results = [Array filteredArrayUsingPredicate:Predicate];
但这会产生错误"无法解析函数名称' CGRectIntersectsRect'到受支持的选择器(CGRectIntersectsRect)"。怎么了?使用谓词代替for将会给我带来一些性能上的提升吗?
答案 0 :(得分:0)
由于谓词解析器无法识别独立的C函数,因此您可以从块中创建谓词:
NSPredicate *intersects = [NSPredicate predicateWithBlock:^BOOL(id obj, NSDictionary *bindings) {
return CGRectIntersectsRect(Frame, obj.frame);
}];
NSArray *results = [Array filteredArrayUsingPredicate:intersects];
我不确定与循环相比的性能提升,因为比较的数量将保持不变。