iOS 類別和擴充(Categories和Extensions)

來源:互聯網
上載者:User

標籤:io   os   使用   檔案   on   問題   代碼   ad   as   

分類(Category)

分類能夠做到的事情主要是:即使在你不知道一個類的源碼情況下,向這個類添加擴充的方法。

此外,分類能夠保證你的實作類別和其他的檔案區分開。

1 #import “UIViewController.h”
2 @interface UIViewController(CustomView)
3 -(void)extMethod;
4 @end

使用分類為類添加方法(Add Methods to Classes)

通過在interface中聲明一個額外的方法並且在implementation 中定義相同名字的方法即可。分類的名字(也就是括弧括起來的CustomView)表示的是:對於聲明於其他地方的這個類(UIViewController),在此處添加的方法是額外的,而不是表示這是一個新的類。你不可以通過分類為一個類添加額外的成員變數。

在implementation中,引入標頭檔的時候主要引用的方式是:

1 #import “UIViewController+CustomView.h”
2 @implementation UIViewController(CustomView)
3 -(void)extMethod;
4 @end

另外,雖然Category不能夠為類添加新的成員變數,但是Category包含類的所有成員變數,即使是@private的。Category可以重新定義新方法,也可以override繼承過來的方法。

類擴充(Class Extensions)

類擴充就像匿名(也就是沒有那個括弧裡面的名字CustomView)的分類一樣,除了一樣不同的是,類擴充聲明必須在@implementation在實現。

先看一段代碼:

複製代碼
1 @interface MyObject:NSObject
2 {
3 NSNumber* number;
4 }
5 -(NSNumber*)getNum;
6 @end
7
8 @interface MyObject(Setter)
9 -(void)setNum:(NSNumber*)num;
10 @end
11
12 @implementation MyObject
13 -(NSNumber*)getNum
14 {
15 return number;
16 }
複製代碼

看上面這段代碼,有沒有問題?編譯器編譯的時候,這段代碼是可以編譯通過,但當運行時,就會報錯。為什嗎?

因為沒有實現Category中的setNum方法。而用類擴充去實現,請看:

複製代碼
1 @interface MyObject:NSObject
2 {
3 NSNumber* number;
4 }
5 -(NSNumber*)getNum;
6 @end
7
8 @interface MyObject() //注意這裡的括弧裡面是沒有名字的
9 -(void)setNum:(NSNumber*)num;
10 @end
11
12 @implementation MyObject
13 -(NSNumber*)getNum
14 {
15 return number;
16 }
17
18 -(void)setNum:(NSNumber*)num
19 {
20 number = num;
21 }
22 @end
複製代碼

setNum是必須要實現,不然編譯器會提出警告。

從上面看出,分類和類擴充的相似之處是:都可以為類添加一個額外的方法;

不同之處在於:要添加額外方法,分類必須在第一個@interface中聲明方法,並且在@implementation中提供實現,不然運行時出錯。而類擴充,你添加的方法是一個required API,如果不去實現,編譯器會警告,而且這個方法的聲明可以不在第一個@interface中去聲明。

iOS 類別和擴充(Categories和Extensions)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.