Untuk lebih jelasnya saya ingin membuat loop awal di mana saya mengumpulkan item untuk dihapus. Lalu saya menghapusnya. Berikut ini contoh menggunakan sintaks Objective-C 2.0:
NSMutableArray *discardedItems = [NSMutableArray array];
for (SomeObjectClass *item in originalArrayOfItems) {
if ([item shouldBeDiscarded])
[discardedItems addObject:item];
}
[originalArrayOfItems removeObjectsInArray:discardedItems];
Maka tidak ada pertanyaan tentang apakah indeks diperbarui dengan benar, atau detail pembukuan kecil lainnya.
Diedit untuk menambahkan:
Telah dicatat dalam jawaban lain bahwa formulasi terbalik harus lebih cepat. yaitu Jika Anda beralih melalui array dan menyusun array objek baru untuk disimpan, bukan objek untuk dibuang. Itu mungkin benar (walaupun bagaimana dengan memori dan biaya pemrosesan mengalokasikan array baru, dan membuang yang lama?) Tetapi bahkan jika lebih cepat itu mungkin bukan masalah besar seperti untuk implementasi naif, karena NSArrays jangan berperilaku seperti array "normal". Mereka bicara tetapi mereka berjalan dengan cara yang berbeda. Lihat analisis yang baik di sini:
Formulasi terbalik mungkin lebih cepat, tetapi saya tidak pernah perlu peduli apakah itu, karena formulasi di atas selalu cukup cepat untuk kebutuhan saya.
Bagi saya pesan untuk dibawa pulang adalah menggunakan formulasi apa pun yang paling jelas bagi Anda. Optimalkan hanya jika perlu. Saya pribadi menemukan formulasi di atas paling jelas, itulah sebabnya saya menggunakannya. Tetapi jika formulasi terbalik lebih jelas bagi Anda, lakukanlah.