Saya telah melihat penggunaan protokol Objective-C digunakan dengan cara seperti berikut:
@protocol MyProtocol <NSObject>
@required
@property (readonly) NSString *title;
@optional
- (void) someMethod;
@end
Saya telah melihat format ini digunakan alih-alih menulis superclass beton yang diperluas subclass. Pertanyaannya adalah, jika Anda mematuhi protokol ini, apakah Anda perlu mensintesis properti sendiri? Jika Anda memperpanjang superclass, jawabannya jelas tidak, Anda tidak perlu melakukannya. Tetapi bagaimana seseorang berurusan dengan properti yang harus dipenuhi oleh suatu protokol?
Untuk pemahaman saya, Anda masih perlu mendeklarasikan variabel instan dalam file header objek yang sesuai dengan protokol yang membutuhkan properti ini. Dalam hal itu, dapatkah kita berasumsi bahwa itu hanya prinsip panduan? Jelas sama bukan kasus untuk metode yang diperlukan. Kompiler akan menampar pergelangan tangan Anda untuk mengecualikan metode yang diperlukan yang tercantum dalam protokol. Apa cerita di balik properti?
Berikut adalah contoh yang menghasilkan kesalahan kompilasi (Catatan: Saya telah memangkas kode yang tidak mencerminkan masalah yang dihadapi):
MyProtocol.h
@protocol MyProtocol <NSObject>
@required
@property (nonatomic, retain) id anObject;
@optional
TestProtocolsViewController.h
- (void)iDoCoolStuff;
@end
#import <MyProtocol.h>
@interface TestProtocolsViewController : UIViewController <MyProtocol> {
}
@end
TestProtocolsViewController.m
#import "TestProtocolsViewController.h"
@implementation TestProtocolsViewController
@synthesize anObject; // anObject doesn't exist, even though we conform to MyProtocol.
- (void)dealloc {
[anObject release]; //anObject doesn't exist, even though we conform to MyProtocol.
[super dealloc];
}
@end