วิธีจัดการโปรโตคอล Objective-C ที่มีคุณสมบัติ?
ฉันเคยเห็นการใช้โปรโตคอล Objective-C ในรูปแบบดังต่อไปนี้: @protocol MyProtocol <NSObject> @required @property (readonly) NSString *title; @optional - (void) someMethod; @end ฉันเคยเห็นรูปแบบนี้ใช้แทนการเขียนซูเปอร์คลาสที่เป็นรูปธรรมที่คลาสย่อยขยายออกไป คำถามคือถ้าคุณปฏิบัติตามโปรโตคอลนี้คุณจำเป็นต้องสังเคราะห์คุณสมบัติด้วยตัวเองหรือไม่? หากคุณกำลังขยายซูเปอร์คลาสคำตอบคือไม่คุณไม่จำเป็นต้องทำ แต่จะจัดการกับคุณสมบัติที่โปรโตคอลต้องการให้สอดคล้องได้อย่างไร? ตามความเข้าใจของฉันคุณยังคงต้องประกาศตัวแปรอินสแตนซ์ในไฟล์ส่วนหัวของอ็อบเจ็กต์ที่สอดคล้องกับโปรโตคอลที่ต้องการคุณสมบัติเหล่านี้ ในกรณีนี้เราสามารถสันนิษฐานได้ว่านั่นเป็นเพียงหลักการชี้นำ? เหมือนกันไม่ใช่กรณีของวิธีการที่จำเป็น คอมไพเลอร์จะตบข้อมือของคุณเพื่อยกเว้นวิธีการที่จำเป็นซึ่งโปรโตคอลแสดงรายการ เรื่องราวเบื้องหลังคุณสมบัติคืออะไร? นี่คือตัวอย่างที่สร้างข้อผิดพลาดในการคอมไพล์ (หมายเหตุ: ฉันได้ตัดโค้ดซึ่งไม่ได้สะท้อนถึงปัญหาในมือ): MyProtocol.h @protocol MyProtocol <NSObject> @required @property (nonatomic, retain) id anObject; @optional TestProtocolsViewController.h - (void)iDoCoolStuff; @end #import <MyProtocol.h> @interface TestProtocolsViewController : UIViewController <MyProtocol> …