Catgory

2016年8月16日星期二17:26

Catgory 分类

#import 

#import "Person.h"

#import "Person+Play.h"

int main(int argc, const char * argv[]) {

    @autoreleasepool{

        /*

         分类的声明

         @interface ClassName(CatgoryName)

         NewMethod;在类别中添加方法

         不允许在类别中添加变量

  
      @end

 
       

         @implementation ClassName(CatgoryName)

  
      NewMethod

  
      @end

 
       

         ClassName:需要给哪个类扩充方法

         CategoryName:分类的名称

         NewMethod:扩充的方法

  
      */

        Person *p = [[Person alloc]init];

        p.age = 23;

        [p playground];

  }

    return 0;

}
Catgory_第1张图片
Paste_Image.png
Catgory_第2张图片
Paste_Image.png

分类注意点

1.分类是用于给原有类添加方法的,它只能添加方法,不能添加属性(成员变量)

2.分类中的@property,只会生成setter/getter方法的声明,不会生成实现以及私有的成员变量

3.可以在分类中访问原有类中.h的属性

4.如果分类中有和原有类同名的方法,会调用分类中的方法

5.如果多个分类中都有和原有类中同名的方法,那么调用该方法的由编译器决定

练习

#import 

#import "NSString+XC.h"

int main(int argc, const char * argv[]) {

    @autoreleasepool{

        NSString *str = @"asdas123456789";

        int count = [str count];

        NSLog(@"count = %i",count);

 
  }

NSString *str1 = @"asdas123456789";

        int count1 = [NSString countWithStr:str1];

        NSLog(@"count = %i",count1);

 

    return 0;

}

#import 

 

@interface NSString
(XC)

+(int)countWithStr:(NSString*)str;

-(int)count;

@end

 

#import "NSString+XC.h"

 

@implementation
NSString (XC)

+(int)countWithStr:(NSString*)str

{

    intcount = 0;

    for(inti = 0; i= '0' && c <='9') { 
          count++;
      }

  }

    returncount;

}

-(int)count

{
 intcount = 0;

//在这个方法里self代表的是谁调用了这个方法,在main里用调用的str所以self就代表str

    for(inti = 0; i= '0' && c <='9') {
          count++;
      }

  }

    returncount;

}

@end

你可能感兴趣的:(Catgory)