Objective C學習筆記第十二章類別

2021-08-27 05:02:24 字數 2856 閱讀 4741

第十二章類別

利用objective-c的動態執行時分配機制,可以為現有的類新增新方法,這種為現有的類新增新方法的方式稱為類別catagory,他可以為任何類新增新的方法,包括那些沒有源**的類

類別使得無需建立物件類的子類就能完成同樣的工作

一、建立類別

1、宣告類別

宣告類別與宣告類的形式很相似

@inte***ce nsstring(numberconvenience)

-(nsnumber *)lengthasnumber;

@end//numberconvenience

這個宣告有兩個特點:

(1)現有的類位於@inte***ce關鍵字之後,然後是位於括號中的類別名稱。

他表示:向nsstring類中新增乙個名稱為numberconvenience的類別

同名類別有唯一性,但是可以新增任意多的不同名類別

(2)可以執行希望向其新增類別的類以及類別的名稱,還可以列出新增的方法

不可以新增新的例項變數,類別生命中沒有例項變數部分

2、實現類別

@implementation nsstring(numberconvenience)

-(nsnumber *)lengthasnumber

//lengthasnumber

@end//numberconvenience

在實現部分也包括類名、類別名和新方法的實現**

3、類別的侷限性

有兩方面侷限性:

(1)無法向類中新增新的例項變數

(2)當類別方法與原始類方法名稱衝突時,類別方法將完全取代初始方法從而無法再使用初始方法

無法新增例項變數的侷限可以使用字典物件解決

4、類別的作用

類別主要有3個作用:

(1)將類的實現分散到多個不同檔案或多個不同框架中

(2)建立對私有方法的向前飲用

(3)向物件新增非正式協議

二、利用類別分散實現

我們可以將類的介面放入標頭檔案中,從而將類的實現放入.m檔案中

但不可以將@implementation分散到多個不同的.m檔案中,使用類別可以完成這一工作

利用類別,可以將乙個類的方法組織到不同的邏輯分組中,使程式設計人員更加容易的閱讀標頭檔案

舉例**:

標頭檔案catagorything.h包含類的宣告和一些類別,匯入foundation框架,然後帶有3個整型變數的宣告

#import

@inte***ce categorything : nsobject

@end // categorything

類宣告之後是3個類別,每個類別具有乙個例項變數的訪問器,將這些實現分散到不同的檔案中

@inte***ce categorything (thing1)

- (void) setthing1: (int) thing1;

- (int) thing1;

@end // categorything (thing1)

@inte***ce categorything (thing2)

- (void) setthing2: (int) thing2;

- (int) thing2;

@end // categorything (thing2)

@inte***ce categorything (thing3)

- (void) setthing3: (int) thing3;

- (int) thing3;

@end // categorything (thing3)

類別可以訪問其繼承的類的例項變數,類別的方法具有最高的優先順序

類別可以分散到不同檔案中,甚至不同框架中

三、使用類別建立前向引用

如果其他類中的方法未實現,在你訪問其他類的私有方法時編譯器報錯

這時使用類別,在類別中宣告這些方法(不必提供方法實現),編譯器就不會再產生警告

四、非正式協議和委託類別

cocoa中的類經常使用一種名為委託(delegate)的技術

委託是一種物件,另乙個類的物件會要求委託物件執行他的某些操作

(看不懂,在實踐中學習)

#import

#import "itunesfinder.h"

int main (int argc, const char *argv)

// main

建立乙個nsobject的類別稱為「建立乙個非正式協議」,因為可以作為任何類的委託物件使用

響應選擇器

選擇器只是乙個方法名稱,但它以objective-c執行時使用特殊方式編碼,以快速執行查詢

可以使用@selector()預編譯指定選擇器,其中方法名位於圓括號中

例如之前的car類的setengine:方法的選擇器是:@selector(setengine:)

而car類的settire:atindex;方法的選擇器如下所示:@selector(settire:atindex;)

nsobject提供了乙個名為respondstoselector方法,該方法詢問物件以確定其是否能夠響應某個特定的訊息

舉例**:

car *car = [[car alloc] init];

if([car respondstoselector:@selector(setengine:)])

選擇器的其他應用

選擇器可以被傳遞,可以作為方法的引數使用,甚至可以作為例項變數儲存

小結類別提供了向現有類新增新方法的手段,即使沒有這些類的源**

類別可以將物件的實現分散到多個不同的原始檔、甚至多個不同的框架中

使用類別可以宣告非正式協議,非正式協議是nsobject的乙個類別,他可以列出物件能夠響應的方法

非正式協議用於委託,委託是一種允許輕鬆定製物件行為的技術

Objective C 學習筆記

1 is a 是乙個 繼承,提高執行效率,減少重複 2 has a 有乙個 復合,物件引用其它物件時,利用其它物件特性。3 返回屬性值的訪問方法,名稱中不能使用get這個詞 4 類名首字母大寫,變數首字母小寫。5 在objective c中所有物件間互動都是通過指標實現的。6 指標值被賦值,只有乙個...

Objective c學習筆記

property是object c的乙個特性,可以讓我們輕鬆實現成員變了的setting和getting方法。具體的語法如下 以成員變數nsstring m name為例 標頭檔案中宣告如下 property nsstring m name m檔案實現 synthesize m name 這樣我們便...

Objective c學習筆記

一 ojective c 建立物件涉及到一下註解 inte ce implementation 前乙個註解定義的是要實現的行為 後乙個註解是實現inte ce定義的行為 1.1在objective c中總共有4個基本資料型別,分別是int float double char 1.2限定詞 限定值有 ...