Objective-C中的類目(Category),延展(Extension)

來源:互聯網
上載者:User

標籤:

類目和延展的作用都是為了擴充一個類。

Objective-C中的類目(Category)

一、類目的定義和作用

類目也叫分類,英文Category,在沒有原類.m檔案的基礎上,給該類添加方法。

比如,NSString類原本沒有helloString方法,我們又沒有NSString類的原代碼,那我們想給NSString類添加一個helloString的方法,只有通過聲明子類或者類目才可以達到這個目的。

二、類目的聲明:

@interfaceNSString (hello)

- (void)helloString;

@end

三、類目實現:

@implementationNSString (hello)

- (void)helloString

{

NSLog(@"my name is %@,I am a string",self);

}

@end

檔案名稱:

NSString+hello.h

使用:

NSString * str = @"我要上天";

[strhelloString];

列印輸出:

my name is 我要上天,I am a string

helloString 實現裡面用到的self就是調用這個方法的執行個體本身。

四、類目使用需要注意的問題:

1、類目裡不能添加執行個體變數,但是類目聲明可以用屬性,其實屬性就是一對兒方法,那麼在.m裡面需要實現這個屬性的setter方法和getter方法,在這兩個實現方法裡面依然不能使用自己添加的執行個體變數。

2、類目裡添加的方法不能和原始類中的方法重名,否則會導致覆蓋。

3、一個類可以添加多個類目,但是類目名和方法名不能重複。

4、類目中的方法可以成為原始類的一部分,和原始類方法層級相同,可以被子類繼承。

局限性: 在類目中只可以為類添加方法,不能添加執行個體變數; 類目中得方法的優先順序要高。

Objective-C中的延展(Extension)

延展也叫Extension:

延展是一種特殊形式的類目,主要是在一個類的.m裡面聲明與實現

延展的作用:就是給某類添加私人方法或私人變數

比如RootViewController.m

@interface RootViewController ()

{

NSString * aString ;

}

- (void)test1;

- (void)test2; 

@end

 

@implementation RootViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

{

self = [super initWithNibName:nibNameOrNilbundle:nibBundleOrNil];

if (self) {

// Custom initialization

}

return self;

}

@end

上面@interface @end定義的就是一個延展,主要定義了RootViewController的私人方法和私人變數。

五、使用延展需要注意的幾個問題:

1、如果括弧裡沒有類目名,則認為延展裡面的方法為全都必須實現,如果有名,則認為是可選實現。

2、雖然延展是給一個類定義私人方法,但是沒有OC沒有絕對的私人方法,其實還是可以調用,另外延展裡面聲明的變數只能在該類內部使用,外界訪問不了。

3、如果是建立檔案建的某類延展.h檔案,則不能加執行個體變數。

Objective-C中的類目(Category),延展(Extension)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.