isEqual:和isKindOfClass: - 哪个更快?

时间:2014-10-17 16:07:13

标签: ios objective-c arrays nsnull

由于各种原因,为了使数组的索引与其他内容保持一致,我在数组中有[NSNull null]。像这样:

NSArray *arr = @[obj1, obj2, obj3, [NSNull null], obj4];

在迭代数组时我正在考虑使用两种方法来确保忽略null值,但我不确定哪种更快。

方法1

for (id obj in arr) {

    if (![[NSNull null] isEqual:obj]) {

        //Do stiff
    }
}

方法2

for (id obj in arr) {

    if ([obj isKindOfClass:[MyObject class]]) {

        //Do stiff
    }
}

我的问题是:因为我正在迭代这个数组以适当地处理平铺滚动视图(因此当用户滚动时它被执行多次并且它尽可能快地运行是至关重要的),哪一个这些方法更快?

1 个答案:

答案 0 :(得分:1)

[NSNull null]是一个单例,所以最简单的方法是检查对象指针是否相同。

如果你真的想要快,请这样做:

for (id obj in arr) {
    if ([NSNull null]!=obj) {
        //Do stuff
    }
}  

但是你不太可能看到视觉界面的任何差异,因为我们谈论的是一个非常小的差异。

注释中讨论的选项是将[NSNull null]放在局部变量中以加快检查速度,但编译器可能会为您执行此操作,因此我只是将其放在此处以供参考:

NSObject *null_obj=[NSNull null];
for (id obj in arr) {
    if (null_obj!=obj) {
        //Do stuff
    }
}