3

由于各种原因,为了保持数组的索引与其他事物对齐,我[NSNull null]在数组内部。像这样:

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

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

方法一

for (id obj in arr) {

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

        //Do stiff
    }
}

方法二

for (id obj in arr) {

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

        //Do stiff
    }
}

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

4

1 回答 1

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
    }
}
于 2014-10-17T16:13:58.437 回答