Kategori Objective-C

Kadang-kadang, Anda mungkin menemukan bahwa Anda ingin memperluas kelas yang ada dengan menambahkan perilaku yang hanya berguna dalam situasi tertentu. Untuk menambahkan ekstensi tersebut ke kelas yang ada, Objective-C menyediakancategories dan extensions.

Jika Anda perlu menambahkan metode ke kelas yang sudah ada, mungkin, untuk menambahkan fungsionalitas agar lebih mudah melakukan sesuatu di aplikasi Anda sendiri, cara termudah adalah dengan menggunakan kategori.

Sintaks untuk mendeklarasikan kategori menggunakan kata kunci @interface, seperti deskripsi kelas Objective-C standar, tetapi tidak menunjukkan pewarisan apa pun dari subkelas. Sebaliknya, ini menentukan nama kategori dalam tanda kurung, seperti ini -

@interface ClassName (CategoryName)

@end

Karakteristik Kategori

  • Kategori dapat dideklarasikan untuk semua kelas, meskipun Anda tidak memiliki kode sumber implementasi asli.

  • Metode apa pun yang Anda deklarasikan dalam kategori akan tersedia untuk semua instance kelas asli, serta semua subclass dari kelas asli.

  • Saat runtime, tidak ada perbedaan antara metode yang ditambahkan oleh kategori dan metode yang diterapkan oleh kelas asli.

Sekarang, mari kita lihat contoh penerapan kategori. Mari tambahkan kategori ke kelas Cocoa NSString. Kategori ini akan memungkinkan kita untuk menambahkan metode baru getCopyRightString yang membantu kita mengembalikan string hak cipta. Itu ditunjukkan di bawah ini.

#import <Foundation/Foundation.h>

@interface NSString(MyAdditions)
+(NSString *)getCopyRightString;
@end

@implementation NSString(MyAdditions)

+(NSString *)getCopyRightString {
   return @"Copyright TutorialsPoint.com 2013";
}

@end

int main(int argc, const char * argv[]) {
   NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
   NSString *copyrightString = [NSString getCopyRightString];
   NSLog(@"Accessing Category: %@",copyrightString);
   
   [pool drain];
   return 0;
}

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

2013-09-22 21:19:12.125 Categories[340:303] Accessing Category: Copyright TutorialsPoint.com 2013

Meskipun metode apa pun yang ditambahkan oleh kategori tersedia untuk semua instance kelas dan subkelasnya, Anda harus mengimpor file header kategori di file kode sumber mana pun di mana Anda ingin menggunakan metode tambahan, jika tidak, Anda akan mengalami peringatan dan kesalahan kompilator.

Dalam contoh kami, karena kami hanya memiliki satu kelas, kami belum menyertakan file header apa pun, dalam kasus seperti itu kami harus menyertakan file header seperti yang disebutkan di atas.