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

Objective-C語言特性:Category類目、Extension延展、Protocol協議

     編輯:關於C語言

Objective-C語言特性:Category類目、Extension延展、Protocol協議

一、Category(類目)

唯一作用:為現有類添加方法(無法添加實例變量)。

適用場景:無法修改原類源碼(如系統框架類、第三方庫)需擴展功能時。

語法

// Student.h 原類
@interface Student : NSObject
@property (nonatomic, strong) NSString *name;
@end

// Student+Test.h 類目聲明
@interface Student (Test)
- (void)test;
@end

// Student+Test.m 類目實現
@implementation Student (Test)
- (void)test {
    NSLog(@"這裡是Student類目的test方法");
}
@end

關鍵點:

  • 聲明格式:@interface 類名 (類目名)
  • 無需指定父類
  • 一個類可有多個類目
  • 調用方式與原類方法無異:[student test];

二、Extension(類延展/匿名類目)

可視為匿名類目,用於聲明私有方法/屬性,僅類內部可見。

典型用法

// Student.m 實現文件中
@interface Student ()
- (void)cheat; // 私有方法聲明
@property (nonatomic, assign) BOOL isCheating; // 私有屬性
@end

@implementation Student
// 類目方法實現
- (void)test { NSLog(@"類目方法"); }

// 私有方法實現
- (void)cheat { NSLog(@"正在作弊"); }
@end

工程規範:

  • .h文件:公開接口(屬性、公共方法)
  • .m文件:Extension聲明私有接口 + 所有實現
  • 編譯產出.a靜態庫,.m不對外發布,實現信息隱藏

三、Protocol(協議)

定義一組方法聲明清單,不實現。遵守協議的類必須實現規定方法(除可選方法)。

聲明語法

@protocol TestProtocol 
@required
- (void)requiredMethod; // 必須實現(默認)

@optional
- (void)optionalMethod; // 可選實現
@end

使用場景

  1. 參數類型約束:
    - (void)doSomethingWithDelegate:(id)delegate;
  2. 屬性類型約束:
    @property (nonatomic, weak) id delegate;

核心價值:定義行為契約,實現面向接口編程,解耦調用者與實現者。UITableViewDataSource、UITableViewDelegate等均為協議模式。

總結對比

特性Category類目Extension延展Protocol協議
目的擴展現有類方法聲明私有接口定義行為契約
可見性公開私有(僅.m可見)公開
添加ivar不可不可不可
實現位置獨立文件.m文件內遵守者類內
典型用途系統類擴展、功能模塊化私有方法/屬性聲明委托模式、API約束
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved