Object C學習筆記14-分類(category)


  在.NET中有一個非常帶勁的特性,那就是擴展方法. 擴展方法使你能夠向現有類型“添加”方法(包括你自定義的類型和對象噢),而無需創建新的派生類型、重新編譯或以其他方式修改原始類型。擴展方法是一種特殊的靜態方法,但是可以像擴展類型上的實例方法一樣進行調用。

  先看看.NET中擴展方法的定義和使用

    public static class test
    {
        public static bool In(this object o, IEnumerable c)
        {
            foreach (object obj in c)
                if (obj.Equals(o))
                    return true;
            return false;
        }
    }
    string[] list = new string[] { "abc" , "123", "C#"};
    Console.WriteLine("Object C".In(list));

  在.NET中Object 類並沒有In方法的定義,但是的確用"Object C"方法調用了In方法。

 

  Object C中的分類(category) 又稱類別在不修改原有的類的基礎上增加新的方法,和.NET一樣不能添加新的實例變量。

 

  新增一個Person的Object C對象,在Person.h文件中定義相應的書屬性name和age,並且定義一個方法:

  -(void) addName:(NSString*) name1 andWithAge:(int) age1;

#import <Foundation/Foundation.h>

@interface Person : NSObject{
    NSString *name;
    int age;
}

@property (retain) NSString *name;
@property (nonatomic)int age;

-(void) addName:(NSString*) name1 andWithAge:(int) age1;

@end
Person.h

  Person 類的詳細描述文件如下:

#import <Foundation/Foundation.h>

@interface Person : NSObject{
    NSString *name;
    int age;
}

@property (retain) NSString *name;
@property (nonatomic)int age;

-(void) addName:(NSString*) name1 andWithAge:(int) age1;

@end
Person.m

 

  怎么調用這里就不說了,如果現在要往類Person中添加一個新的方法 

  -(void) addCate:(NSString*) cate;

 

  新建一個PersonCategory 類,產生.h,.m兩個文件。

#import <Foundation/Foundation.h>
#import "Person.h"

@interface Person(cate)

-(void) addCate:(NSString*) cate;

@end

  在PersonCategory.h文件中修改為如上代碼,將PersonCategory改為Person,並且后面括號為(cate)  ; () 中的名字可以隨便取

#import "PersonCategory.h"

@implementation Person(cate)

-(void) addCate:(NSString *)cate{
    NSLog(@"dafdasfdsa=%@",cate);
}

@end

  修改PersonCategory.m文件中的代碼如上。通過以上代碼就可以往Person類中添加新方法 addCate 。

  測試調用addCate方法如下:

Person *peron=[[Person alloc] init];
        [peron addName:@"hechen" andWithAge:23];
        
        [peron addCate:@"safdasfds"];

  通過以上代碼可以看得出 Person 可以調用addCate方法了,當然調用addCate方法需要引入文件PersonCategory.h 文件。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM