В вашем коде [self.arrayMovement count] будет создано количество потоков, но они будут работать в последовательном порядке, так как все потоки хотят выполнить функцию 'detectMove' в основном потоке.
При выполнении следующего оператора:
[self performSelectorOnMainThread:@selector(detectMove:) withObject:(NSNumber*)arrayIndex waitUntilDone:NO];
-> сделать метод 'detectMove' для выполнения в главном потоке, один поток может выполнять только один оператор за раз, из-за этого вы увидите последовательную операцию из вашей реализации потока.