Objective-C:分類(Category、extension)

來源:互聯網
上載者:User

標籤:

分類(Category 、Extension)(一)分類的劃分   (2) 1、(命名的類別)類別Category:只能添加新的方法,不能添加新變數。         2、(未命名的類別)類的擴充Extension://擴充一般直接寫在類的實現檔案中

                                       //擴充中定義的都是類中私人的執行個體變數和方法       

(二)分類的使用

(1)分類只能增加方法(包括類方法和對象方法),不能增加成員變數

(2)在分類方法的實現中可以訪問原來類中的成員變數;

(3)分類中可以重新實現原來類中的方法,但是會覆蓋掉原來的方法,導致原來的方法無法再使用(警告);

(4)方法調用的優先順序:分類->原來的類->父類,若包含有多個分類,則最後參與編譯的分類優先;

(5)在很多的情況下,往往是給系統內建的類添加分類,如NSObject和NSString,因為有的時候,系統類別可能並不能滿足我們的要求。

(6)在大規模的應用中,通常把相應的功能寫成一個分類,可以有無限個分類,對原有類進行擴充,一般分模組寫,一個模組一個分類。

 //自訂的字串類String

 1 //  String.h 2 //  類別 3 // 4 //  Created by ma c on 15/8/12. 5 //  Copyright (c) 2015年 bjsxt. All rights reserved. 6 // 7  8 #import <Foundation/Foundation.h> 9 10 @interface String : NSObject11 @property(nonatomic,strong)NSString* string;12 -(id)initWithString:(NSString*) str;13 -(void)print;14 @end
 1 //  String.m 2 //  類別 3 // 4 //  Created by ma c on 15/8/12. 5 //  Copyright (c) 2015年 bjsxt. All rights reserved. 6 // 7  8 #import "String.h" 9 //#import "String_String_private.h"//在String類單獨匯入一個類擴充檔案10 11 //類擴充extension,添加的屬性str1和show方法都是私人的,只能在String類中可以訪問得到12 @interface String()//直接將類擴充檔案寫入String類的實現中13 {14     NSString *str1;15 }16 -(void)show;17 @end18 19 20 @implementation String21 -(id)initWithString:(NSString*) str22 {23     self = [super init];24     if(self)25     {26         _string = str;27     }28     return self;29 }30 -(void)show31 {32     NSLog(@"string is runing");33 }34 -(void)print//通過print方法訪問到類擴充中添加的屬性和方法35 {36     [self show];37     NSLog(@"%@",_string);38 }39 @end

 

//單獨的類擴充檔案

 1 //  String_String_private.h 2 //  類別 3 // 4 //  Created by ma c on 15/8/12. 5 //  Copyright (c) 2015年 bjsxt. All rights reserved. 6 // 7  8 #import "String.h" 9 10 @interface String ()11 {12     NSString *str1;13 }14 //@property(nonatomic,strong)NSString* str1;15 -(void)show;16 @end

 

//類別檔案

 1 //  String+Count.h 2 //  類別 3 // 4 //  Created by ma c on 15/8/12. 5 //  Copyright (c) 2015年 bjsxt. All rights reserved. 6 // 7  8 #import "String.h" 9 //String的類別Count,添加的方法,對String類進行功能的擴充(切記:類別中只能添加方法)10 @interface String (Count)11 -(NSInteger) nmuberOfString: (NSString *)str;12 -(NSInteger) numberOfCount: (NSString *)str;13 @end
 1 //  String+Count.m 2 //  類別 3 // 4 //  Created by ma c on 15/8/12. 5 //  Copyright (c) 2015年 bjsxt. All rights reserved. 6 // 7  8 #import "String+Count.h" 9 10 @implementation String (Count)11 -(NSInteger) nmuberOfString: (NSString *)str12 {13     NSInteger count = 0;14     for(int i=0;i<str.length;i++)15     {16         unichar ch = [str characterAtIndex:i];17         if(ch>=‘0‘ && ch<=‘9‘)18             count++;19     }20     return count;21 }22 -(NSInteger) numberOfCount: (NSString *)str23 {24     NSInteger count = 0;25     for(int i=0;i<str.length;i++)26     {27         unichar ch = [str characterAtIndex:i];28         if(ch>=‘0‘ && ch<=‘9‘)29             count++;30     }31     return count;32 }33 @end

 

//主函數測試

 1 //  main.m 2 //  類別 3 // 4 //  Created by ma c on 15/8/12. 5 //  Copyright (c) 2015年 bjsxt. All rights reserved. 6 // 7  8 #import <Foundation/Foundation.h> 9 #import "String+Count.h"10 #import "String.h"11 int main(int argc, const char * argv[])12 {13     @autoreleasepool14     {15        //測試類別擴充(未命名的類別)   關鍵字:extension16        String *string = [[String alloc]initWithString:@"xiayuan"];17       [string print];18         19         20        //測試類別(命名的類別)      關鍵字:Category21        NSInteger a = [string nmuberOfString:@"xu3984jjsn6ew32"];22        NSLog(@"a = %ld",a);23         24        NSInteger b = [string numberOfCount:@"36y3jfse93u4gdf8"];25        NSLog(@"b = %ld",b);26     }27     return 0;28 }

//運行結果

2015-08-12 15:24:06.281 類別[1304:75695] string is runing

2015-08-12 15:24:06.282 類別[1304:75695] xiayuan

2015-08-12 15:24:06.282 類別[1304:75695] a = 7

2015-08-12 15:24:06.282 類別[1304:75695] b = 7

Program ended with exit code: 0

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.