首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Objective-C 協議詳解:@protocol 與委托模式實戰

     編輯:關於C語言

Objective-C 協議:類似 C++ 純虛類的接口規範機制

協議定義方法簽名集合,類選擇遵循並實現。支援可選/必選方法、多協議組合、委托模式類型安全檢查。

1. 協議聲明與繼承

// 基礎協議
@protocol BaseProtocol
- (void)baseMethod;
@end

// 繼承協議
@protocol SonProtocol 
- (void)sonMethod;
@end

2. 類遵循協議

// 單協議
@interface Car : NSObject 
@end

// 多協議
@interface Car : NSObject 
@end

3. 方法修飾符:@required vs @optional

@protocol WorkerProtocol 
@optional
- (void)doOptionalWork;   // 可選實現

@required
- (void)doRequiredWork;   // 必須實現(默認)
@end

區別於 C++:C++ 純虛函數強制全部實現,OC 協議可靈活標記。

4. 委托模式中的類型安全

@interface Manager : NSObject
@property (weak) id  delegate;  // 必須遵循 WorkerProtocol
- (void)doWork;
@end

// 正確用法
Manager *mgr = [[Manager alloc] init];
mgr.delegate = [[WorkerImpl alloc] init];  // WorkerImpl 遵循協議
[mgr doWork];

// 編譯器報警示例
NSString *name = @"akon";
mgr.delegate = name;  // ⚠️ Warning: Assigning to 'id' from incompatible type 'NSString*'

5. 協議合成與分類擴展

  • 類別可在分類中聲明遵循協議:@interface MyClass (Private)
  • 協議可組合:id obj;
  • 運行時檢查:[obj conformsToProtocol:@protocol(WorkerProtocol)]

最佳實踐

  1. 委托屬性必用 weak 避免循環引用
  2. 協議名以 Delegate/DataSource 結尾(如 UITableViewDelegate)
  3. 大量可選方法時考慮拆分為多個細粒度協議
  4. Swift 中對應 protocol,支援關聯類型、默認實現等更強特性
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved