Jika Anda menginisialisasi NSMutableArray dengan metode praktis NSArray seperti di atas, apakah Anda mendapatkan NSArray atau NSMutableArray?
Ada konsekuensinya?
(Saya tahu NSMutableArray memiliki "arrayWithCapacity:, saya hanya ingin tahu)
Jika Anda menginisialisasi NSMutableArray dengan metode praktis NSArray seperti di atas, apakah Anda mendapatkan NSArray atau NSMutableArray?
Ada konsekuensinya?
(Saya tahu NSMutableArray memiliki "arrayWithCapacity:, saya hanya ingin tahu)
Jika Anda menginisialisasinya menggunakan:
NSMutableArray *array = [NSMutableArray array];
Anda mendapatkan NSMutableArray. Salah satu fitur hebat dari Objective-C adalah bahwa metode kelas diwarisi oleh subkelas.
Jadi, dalam metode kelas Anda bisa melakukan sesuatu seperti ini:
+(id)array {
return [[[self alloc] init] autorelease];
}
dan self
akan merujuk ke objek kelas tempat kode dieksekusi (NSArray
atau NSMutableArray
).
Pembaruan: Meskipun saran saya untuk "mengujinya sendiri" secara umum merupakan ide yang bagus, dalam kasus ini saran saya sedikit menyenangkan. Terima kasih kepada Jim di komentar karena menunjukkan bahwa saran saya di bawah ini tidak berfungsi dengan baik untuk kelas-kelas ini, karena berbagai bentuk NSArray semuanya diimplementasikan oleh kelas penghubung bebas pulsa CoreFoundation.
----- Jawaban Asli Untuk Konteks Di Bawah -----
Cara termudah untuk menjawab pertanyaan seperti ini adalah dengan mengujinya sendiri. Coba alokasikan array sesuai keinginan Anda, lalu NSLog dari kode Anda:
NSLog(@"Kami mendapat %@", NSStringFromClass([kelas Array]));
NSCFArray
?
- person Jim Dovey; 12.05.2009