Protokol Objective-C

Objective-C memungkinkan Anda untuk mendefinisikan protokol, yang menyatakan metode yang diharapkan akan digunakan untuk situasi tertentu. Protokol diimplementasikan di kelas yang sesuai dengan protokol.

Contoh sederhananya adalah kelas penanganan URL jaringan, ia akan memiliki protokol dengan metode seperti metode delegasi processCompleted yang mengintimidasi kelas pemanggil setelah operasi pengambilan URL jaringan selesai.

Sintaks protokol ditampilkan di bawah ini.

@protocol ProtocolName
@required
// list of required methods
@optional
// list of optional methods
@end

Metode di bawah kata kunci @required harus diterapkan di kelas yang sesuai dengan protokol dan metode di bawah @optional kata kunci bersifat opsional untuk diterapkan.

Berikut adalah sintaks untuk kelas yang sesuai dengan protokol

@interface MyClass : NSObject <MyProtocol>
...
@end

Ini berarti bahwa setiap instance MyClass tidak hanya akan merespons metode yang dideklarasikan secara khusus di antarmuka, tetapi MyClass juga menyediakan implementasi untuk metode yang diperlukan di MyProtocol. Tidak perlu mendeklarasikan ulang metode protokol di antarmuka kelas - cukup mengadopsi protokol.

Jika Anda memerlukan kelas untuk mengadopsi beberapa protokol, Anda dapat menetapkannya sebagai daftar yang dipisahkan koma. Kami memiliki objek delegasi yang menyimpan referensi objek pemanggil yang mengimplementasikan protokol.

Contohnya ditunjukkan di bawah ini.

#import <Foundation/Foundation.h>

@protocol PrintProtocolDelegate
- (void)processCompleted;

@end

@interface PrintClass :NSObject {
   id delegate;
}

- (void) printDetails;
- (void) setDelegate:(id)newDelegate;
@end

@implementation PrintClass
- (void)printDetails {
   NSLog(@"Printing Details");
   [delegate processCompleted];
}

- (void) setDelegate:(id)newDelegate {
   delegate = newDelegate;
}

@end

@interface SampleClass:NSObject<PrintProtocolDelegate>
- (void)startAction;

@end

@implementation SampleClass
- (void)startAction {
   PrintClass *printClass = [[PrintClass alloc]init];
   [printClass setDelegate:self];
   [printClass printDetails];
}

-(void)processCompleted {
   NSLog(@"Printing Process Completed");
}

@end

int main(int argc, const char * argv[]) {
   NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
   SampleClass *sampleClass = [[SampleClass alloc]init];
   [sampleClass startAction];
   [pool drain];
   return 0;
}

Sekarang ketika kita mengkompilasi dan menjalankan program, kita akan mendapatkan hasil sebagai berikut.

2013-09-22 21:15:50.362 Protocols[275:303] Printing Details
2013-09-22 21:15:50.364 Protocols[275:303] Printing Process Completed

Dalam contoh di atas kita telah melihat bagaimana metode delgate dipanggil dan dijalankan. Ini dimulai dengan startAction, setelah proses selesai, metode delegasi processCompleted dipanggil untuk mendekati operasi selesai.

Di aplikasi iOS atau Mac mana pun, kami tidak akan pernah memiliki program yang diimplementasikan tanpa delegasi. Jadi, penting bagi kami untuk memahami penggunaan delegasi. Objek delegasi harus menggunakan tipe properti unsafe_unretained untuk menghindari kebocoran memori.