2014-09-22 75 views
1

我想從SKSpriteNode數組中提取僅與預先確定的框架相交的元素。我可以通過迭代做到這一點:通過CGRectIntersectsRect過濾nsmutable數組

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)」。怎麼了?使用predicate而不是for會給我一些性能上的提升?

回答

0

由於謂詞解析器不能識別一個獨立的C函數,你可以從一個塊斷言:

NSPredicate *intersects = [NSPredicate predicateWithBlock:^BOOL(id obj, NSDictionary *bindings) { 
    return CGRectIntersectsRect(Frame, obj.frame); 
}]; 
NSArray *results = [Array filteredArrayUsingPredicate:intersects]; 

我不知道比較的性能增益的循環,不過,因爲比較次數將保持不變。