Currently we compare items like this: result &= (!l && !r) || [l isEqualToString:r]; Change it to something like this: result &= (l == r) || [l isEqualToString:r]; It will improve performance in the case when "l" and "r" are equal pointers.