我有一个b2Bodies数组要通过我的更新循环在安全点删除,但有时我需要删除对象而不将它们添加到此数组。在我这样做之前,我想检查一下是否已经在数组中,并且如果它已被删除,那么该对象不会被删除两次(导致异常)。我知道如果身体是一个客观的c物体,这将是简单的。
将对象添加到数组中:
[bodiesToBeDestroyedMutableArray addObject:[NSValue valueWithPointer:body]];
我可以将bodiesToBeDestroyedMutableArray
中的对象与给定的b2Body指针进行比较,看看它们是否(指向)同一个身体吗?我试过了:
if ([bodiesToBeDestroyedMutableArray containsObject:[NSValue valueWithPointer:body]])
和
for(NSValue *bodyValue in bodiesToBeDestroyedMutableArray) {
b2Body *bodyToTest = (b2Body*)[bodyValue pointerValue];
if(bodyToTest == body){
NSLog(@"body found in bodies to be destroyed");
}
}
答案 0 :(得分:0)
没有检查你提到的相等测试是否正常工作......
您可以使用body-> SetUserData设置某种标识符(标记),以便稍后检查标记之间的公平性。
万一你已经将其他东西设置为bodydata(就像在mi情况下一样),通过将此“tag”设置为userdata所具有的任何内容,同样的方法也是有效的。
例如:
// Get the user data
XXSomeClass *block = (__bridge XXSomeclass*)b->GetUserData();
// Retrieve body from array
// Might need to cast the returning item from the array with (XXTypeAtArray *)
XXTypeAtArray *item = [arrayOfBlocks objectAtIndex:block.tag];