Saya mengetahui beberapa aturan mengenai kategori Objective-C:
- Metode kategori tidak boleh mengesampingkan metode yang ada (kelas atau instance)
- Dua kategori berbeda yang menerapkan metode yang sama untuk kelas yang sama akan menghasilkan perilaku yang tidak terdefinisi
Saya ingin tahu apa yang terjadi ketika saya mengganti salah satu metode kategori saya dalam kategori yang sama. Misalnya:
@interface NSView (MyExtensions)
- (void)foo; // NSView category implementation
@end
@interface MyClass : NSView
{ }
@end
@interface MyClass (MyExtensions)
- (void)foo; // MyClass category implementation
@end
Dengan ditentukannya antarmuka ini, metode mana yang akan dieksekusi ketika saya menjalankan kode berikut?
MyClass * instance = [[MyClass alloc] initWith...];
[instance foo];
[instance release];
Catatan: Dengan kompiler saya, implementasi MyClass diutamakan, tetapi saya tidak yakin apakah hal itu dijamin akan terjadi, atau hanya satu jenis perilaku tidak terdefinisi.