isEqual: y esKindOfClass: – ¿Cuál es más rápido?

Por varias razones, para mantener los índices de una matriz alineados con otras cosas, tengo [NSNull null] dentro de la matriz. Me gusta esto:

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

Hay dos methods que estoy considerando usar al recorrer la matriz para asegurarme de ignorar el valor null , pero no estoy seguro de cuál es más rápido.

Método 1

 for (id obj in arr) { if (![[NSNull null] isEqual:obj]) { //Do stiff } } 

Método 2

 for (id obj in arr) { if ([obj isKindOfClass:[MyObject class]]) { //Do stiff } } 

Mi pregunta es: ya que estoy recorriendo esta matriz para manejar apropiadamente una vista de desplazamiento en mosaico (por lo tanto, se ejecuta muchas veces a medida que el usuario se desplaza y es crucial que se ejecute lo más rápido posible), ¿ cuál de estos methods es más rápido?

[NSNull null] es un singleton, por lo que las cosas más fáciles de hacer es verificar si el puntero del object es el mismo.

Si realmente quieres ser rápido, haz esto:

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

PERO es poco probable que vea NINGUNA diferencia para una interfaz visual, ya que estamos hablando de una diferencia muy pequeña.

Una opción que se analiza en los comentarios es poner [NSNull null] en una variable local para acelerar las comprobaciones, pero es posible que el comstackdor lo haga por usted, así que solo estoy poniendo esto aquí como reference:

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