ฉันรู้กฎสองสามข้อเกี่ยวกับหมวดหมู่ Objective-C:
- วิธีการหมวดหมู่ไม่ควรแทนที่วิธีการที่มีอยู่ (คลาสหรืออินสแตนซ์)
- หมวดหมู่ ที่แตกต่างกัน สองหมวดหมู่ที่ใช้วิธีการเดียวกันสำหรับคลาสเดียวกันจะส่งผลให้เกิดพฤติกรรมที่ไม่ได้กำหนดไว้
ฉันต้องการทราบว่าจะเกิดอะไรขึ้นเมื่อฉันแทนที่วิธีการจัดหมวดหมู่ของฉันเองในหมวดหมู่เดียวกัน ตัวอย่างเช่น:
@interface NSView (MyExtensions)
- (void)foo; // NSView category implementation
@end
@interface MyClass : NSView
{ }
@end
@interface MyClass (MyExtensions)
- (void)foo; // MyClass category implementation
@end
เมื่อกำหนดอินเทอร์เฟซเหล่านี้แล้ว วิธีใดที่จะถูกดำเนินการเมื่อฉันรันโค้ดต่อไปนี้
MyClass * instance = [[MyClass alloc] initWith...];
[instance foo];
[instance release];
หมายเหตุ: สำหรับคอมไพเลอร์ของฉัน การใช้งาน MyClass จะมีความสำคัญกว่า แต่ฉันไม่แน่ใจว่าจะรับประกันว่าจะเกิดขึ้นหรือไม่ หรือเป็นเพียงลักษณะเฉพาะของพฤติกรรมที่ไม่ได้กำหนดไว้เท่านั้น