Objective-C基礎6 : 類別category

來源:互聯網
上載者:User

標籤:

1.為什麼要有類別?在現有類的基礎上做擴充,可以採用繼承和組合兩種方法來實現,但是OC為什麼還要有類別這種方式呢?

想想這樣一個應用情境,要建立一個字典,key是字串,value是字串的長度。一般的做法是:

        NSMutableDictionary *dict = [NSMutableDictionary dictionary];        NSString* str = @"hello";        NSNumber* num1 = [NSNumber numberWithUnsignedInt:[str length]];        [dict setObject:num1 forKey:str];        str = @"world";        num1 = [NSNumber numberWithUnsignedInt:[str length]];        [dict setObject:num1 forKey:str];         NSLog (@"%@", dict);

 由於NSMutableDictionary儲存的key-value必須是OC對象,不能儲存int等基本的c語言類型,所以上面dict中對象value長度必須是NSNumber類型,每儲存一個長度都得調用NSNumber* num1 = [NSNumber numberWithUnsignedInt:[str length]]這行重複代碼,類別就可以用來解決這類問題。

另外對於一些沒有源碼的類,比如NSString類,從NSString繼承是一個很糟糕的選擇,因為你無法知道NSString內部是怎麼實現的,NSString會根據不同的初始化內部建立不同的對象,類別能解決這個問題。

2.類別個人感覺就像C裡面的全域函數一樣,比如上面的例子,可以傳入一個長度,返回一個NSNumber*對象。類型的聲明方法:在類的後面加入類別名稱並且用括弧括起來。

@interface NSString (NumberConvenience)

- (NSNumber *)lengthAsNumber;

@end

NumberConvenience實現很簡單

@implementation NSString (NumberConvenience)- (NSNumber *)lengthAsNumber{    NSUInteger length = [self length];        return ([NSNumber numberWithUnsignedInt:length]);} // lengthAsNumber@end

 利用協議解決1中重複代碼問題如下:

        NSMutableDictionary *dict = [NSMutableDictionary dictionary];        NSString* str = @"hello";        [dict setObject:[str lengthAsNumber] forKey:str];        str = @"world";        [dict setObject:[str lengthAsNumber] forKey:str];         NSLog (@"%@", dict);

 代碼清爽簡單多了!!!!

3.類別優缺點。

類別缺陷:1)無法新增成員變數 2)容易造成名字衝突。當名字衝突的時候類別中的方法具有高優先順序,他將覆蓋其他同名名字變成可見的。

類別優點:1)可以將實現代碼分散到不同檔案或者架構裡面去。2)建立對私人方法的引用 3)向對象添加非正式協議(informal protocol)

 

Objective-C基礎6 : 類別category

相關文章

聯繫我們

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