Protokol dan Kategori
Terokai protokol untuk mentakrifkan kontrak komunikasi dan kategori untuk menambah kaedah pada kelas sedia ada tanpa pewarisan subkelas.
Protokol dan Kategori ialah pelajaran Pembangunan Objective-C untuk Aplikasi iOS Lama dan Perusahaan percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Pembangunan Objective-C untuk Aplikasi iOS Lama dan Perusahaan, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Pembangunan Objective-C untuk Aplikasi iOS Lama dan Perusahaan merangkumi sejumlah 4 pelajaran.
Memperluas Tingkah Laku: Pengenalan
Selamat datang ke pelajaran tentang Protocols dan Categories dalam Objective-C! Ini ialah ciri berkuasa yang membolehkan anda memperluas fungsi class dengan cara yang fleksibel.
Kita akan meneroka cara protocols mentakrifkan kontrak untuk komunikasi antara objek dan cara categories membolehkan anda menambah kaedah pada class sedia ada tanpa perlu mencipta subkelas.
Protocols: Kontrak Komunikasi
Anggaplah protocol Objective-C sebagai pelan atau kontrak. Ia mengisytiharkan senarai kaedah yang boleh dipilih oleh class lain untuk dilaksanakan.
- Class yang "mengguna pakai" protocol berjanji untuk melaksanakan kaedah yang diperlukan.
- Ini penting untuk mewujudkan corak komunikasi, seperti corak delegate yang popular.
- Protocols serupa dengan antara muka dalam bahasa seperti Java atau C#.
Mentakrifkan Protocol
Untuk mentakrifkan protocol, anda menggunakan arahan @protocol. Anda boleh menetapkan kaedah sebagai @required (mesti dilaksanakan) atau @optional (boleh dilaksanakan).
Protocols sering mematuhi <NSObject>, yang bermaksud mana-mana class yang menggunakannya mestilah objek Objective-C.
@protocol MyServiceDelegate <NSObject>
@required
- (void)serviceDidFinishLoadingData:(NSArray *)data;
@optional
- (void)serviceDidStartRequest;
@endMengguna Pakai & Melaksanakan Protocol
Sesuatu class mengguna pakai protocol dengan menyenaraikannya dalam kurungan sudut selepas superclassnya. Kemudian, class itu mesti melaksanakan semua kaedah @required.
Mari lihat contoh apabila class DataLoader memerlukan delegate untuk memaklumkan kepadanya apabila data sudah sedia.
#import <Foundation/Foundation.h>
// 1. Define the delegate protocol
@protocol DataLoaderDelegate <NSObject>
- (void)dataLoader:(id)loader didFinishLoadingData:(NSString *)data;
- (void)dataLoaderDidFail:(id)loader withError:(NSError *)error;
@end
// 2. Class that uses the delegate
@interface MyDataLoader : NSObject
@property (nonatomic, weak) id<DataLoaderDelegate> delegate; // The delegate property
- (void)loadData;
@end
@implementation MyDataLoader
- (void)loadData {
NSLog(@"DataLoader: Starting data load...");
// Simulate network request
NSString *result = @"Sample Data Loaded!";
// Notify the delegate
if ([self.delegate respondsToSelector:@selector(dataLoader:didFinishLoadingData:)]) {
[self.delegate dataLoader:self didFinishLoadingData:result];
}
}
@end
// 3. Class that conforms to the protocol (the delegate)
@interface MyDataConsumer : NSObject <DataLoaderDelegate> // Adopting the protocol
- (void)startConsumption;
@end
@implementation MyDataConsumer
- (void)startConsumption {
MyDataLoader *loader = [[MyDataLoader alloc] init];
loader.delegate = self; // Set self as the delegate
[loader loadData];
}
#pragma mark - DataLoaderDelegate Methods
- (void)dataLoader:(id)loader didFinishLoadingData:(NSString *)data {
NSLog(@"DataConsumer: Received data: %@", data);
}
- (void)dataLoaderDidFail:(id)loader withError:(NSError *)error {
NSLog(@"DataConsumer: Failed with error: %@", error.localizedDescription);
}
@end
// 4. Main execution
int main(int argc, const char * argv[]) {
@autoreleasepool {
MyDataConsumer *consumer = [[MyDataConsumer alloc] init];
[consumer startConsumption];
}
return 0;
}Categories: Memperluas Class
Categories menyediakan cara untuk menambah kaedah baharu pada class sedia ada, termasuk class yang bukan milik anda (seperti NSString atau NSObject), tanpa mengubah kod sumber asalnya atau mencipta subkelas.
- Categories sangat berguna untuk menyusun kod mengikut kumpulan yang logik.
- Anda tidak boleh menambah pemboleh ubah tika baharu pada class menggunakan category.
- Jika kaedah category mempunyai nama yang sama dengan kaedah sedia ada, pelaksanaan category akan digunakan (ini boleh menyebabkan tingkah laku yang tidak dijangka!).
Mentakrifkan Category
Untuk mentakrifkan category, anda mencipta fail antara muka (.h) dan fail pelaksanaan (.m). Sintaksnya kelihatan seperti ini:
@interface ClassName (CategoryName)Mari cipta category pada NSString untuk menambah beberapa kaedah utiliti.
// NSString+MyStringAdditions.h
#import <Foundation/Foundation.h>
@interface NSString (MyStringAdditions)
- (BOOL)isEmailValid;
- (NSString *)stringByCapitalizingFirstLetter;
@endMelaksanakan Kaedah Category
Sekarang mari laksanakan kaedah yang kita isytiharkan dalam category NSString+MyStringAdditions kita. Setelah dilaksanakan, kaedah ini tersedia pada mana-mana tika NSString!
Cuba jalankan contoh ini untuk melihat cara ia berfungsi:
#import <Foundation/Foundation.h>
// 1. Define the Category Interface
@interface NSString (MyStringAdditions)
- (NSString *)stringWithPrependedHello;
- (NSString *)stringWithAppendedExclamation;
@end
// 2. Implement the Category Methods
@implementation NSString (MyStringAdditions)
- (NSString *)stringWithPrependedHello {
return [NSString stringWithFormat:@"Hello, %@", self];
}
- (NSString *)stringWithAppendedExclamation {
return [NSString stringWithFormat:@"%@!", self];
}
@end
// 3. Main execution
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSString *name = @"CoddyKit";
// Use category methods
NSString *greeting = [name stringWithPrependedHello];
NSString *excitedGreeting = [greeting stringWithAppendedExclamation];
NSLog(@"Original: %@", name);
NSLog(@"Greeting: %@", greeting);
NSLog(@"Excited: %@", excitedGreeting);
}
return 0;
}Bila Perlu Menggunakan Protocol berbanding Category
Penting untuk mengetahui bila hendak memilih antara protocols dengan categories:
- Protocols: Gunakan apabila anda perlu mentakrifkan antara muka atau kontrak umum yang boleh dipatuhi oleh beberapa class yang tidak berkaitan (contohnya, corak delegate dan sumber data). Protocols mentakrifkan perkara yang boleh dilakukan oleh objek.
- Categories: Gunakan apabila anda mahu menambah kaedah utiliti pada class sedia ada, mengumpulkan kaedah berkaitan atau memperluas class tanpa mencipta subkelas (contohnya, menambah kaedah penghuraian tersuai pada
NSString). Categories memperluas cara objek boleh berkelakuan.
Protocols & Pewarisan
Sesuatu protocol juga boleh mengguna pakai protocol lain, lalu mewujudkan hierarki keperluan. Contohnya, @protocol ChildProtocol <ParentProtocol> bermaksud ChildProtocol merangkumi semua kaedah daripada ParentProtocol.
Ini membolehkan anda membina kontrak yang lebih kompleks dengan menggabungkan kontrak yang lebih ringkas.
Semakan Pantas: Protocols
Pertimbangkan coretan kod Objective-C berikut:
@protocol DataProcessor
@required
- (void)processData:(NSArray *)data;
@optional
- (void)didStartProcessing;
@end Apakah tujuan utama protocol ini?
Imbas Kembali: Protocols & Categories
Syabas! Dalam pelajaran ini, anda telah mempelajari dua ciri Objective-C yang berkuasa:
- Protocols: Mentakrifkan kontrak kaedah yang boleh diguna pakai oleh class untuk membolehkan komunikasi dan mewujudkan antara muka umum.
- Categories: Memperluas class sedia ada dengan menambah kaedah baharu tanpa pewarisan, dan berguna untuk fungsi utiliti serta penyusunan kod.
Penguasaan ciri ini akan membantu anda membina aplikasi Objective-C yang lebih fleksibel dan modular!
Pelajari Objective-C dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 12
- Pelajaran
- 48
Soalan Lazim
Adakah pelajaran “Protokol dan Kategori” percuma?
Ya — teks penuh “Protokol dan Kategori” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Pembangunan Objective-C untuk Aplikasi iOS Lama dan Perusahaan, tingkat taraf kepada CoddyKit PRO. Kursus Pembangunan Objective-C untuk Aplikasi iOS Lama dan Perusahaan merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Protokol dan Kategori”?
Terokai protokol untuk mentakrifkan kontrak komunikasi dan kategori untuk menambah kaedah pada kelas sedia ada tanpa pewarisan subkelas. Anda berlatih Pembangunan Objective-C untuk Aplikasi iOS Lama dan Perusahaan menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Pembangunan Objective-C untuk Aplikasi iOS Lama dan Perusahaan?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Pembangunan Objective-C untuk Aplikasi iOS Lama dan Perusahaan di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.
Berapa lamakah pelajaran “Protokol dan Kategori” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Pembangunan Objective-C untuk Aplikasi iOS Lama dan Perusahaan ini?
Ya. Setiap pelajaran Pembangunan Objective-C untuk Aplikasi iOS Lama dan Perusahaan menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Kelas, Objek dan Kaedah
- Sifat dan Pemboleh Ubah Tika
- Protokol dan Kategori
- Pewarisan dan Penggantian Kaedah