类扩展

给一个已有的类添加 category

@interface ClassName (CategoryName)

- (NSString *)  Nothin_additionalMmethod;

@end

可以在category中给类添加扩展方法

category通常声明在单独的.h文件中,实现category在一个单独的.m文件中

.h文件的命名规则:ClassName+CategoryName.h

.m文件需要import .h文件

#import "ClassName+CategoryName.h"

@implementation ClassName

- (NSString *) Nothin_additionalMethod

{

  return @"Nothin";

}

@end

为了避免Category中定义的扩展方法出现名字冲突,一般给扩展方法的名字加前缀

 

给类添加扩展方法的另一种方式:Class Extensions

Class Extensions 是在编译是对类进行扩展的,所以只有在原有类的源代码的情况下,才可以定义 Class Extensions

@interface ClassName ()

@property NSString *additionalProp;

@end

Class Extensions 的语法和Category的语法类似,只是括号中没有CategoryName, 所以也可以叫匿名Category

Class Extensions 和Category的区别是,在Class Extensions中可以对原有类扩展属性和实例变量

 

一般情况下@interface中声明的方法和属性都是public的,class extensions可以用来声明一些私有方法或属性,例如可以声明一个property对外是readonly的,对类内部是readwrite的

//.h

@interface ClassName : NSObject

@property (readonly) NSString *prop

@end

 

//.m

@interface ClassName ()

@property (readwrite) NSString *prop

@end

 

@implementation ClassName

...

@end

posted @ 2014-07-24 13:42  Super猪  阅读(184)  评论(0编辑  收藏  举报