Objective C 总结(五):扩展现有类 - 类别

类别类似于C#中的扩展方法,是对现在类进行行为的扩展,它不能进行数据扩展,也就是不能定义字段和属性;

定义:

#import "XYZPerson.h"
 
@interface XYZPerson (XYZPersonNameDisplayAdditions)
- (NSString *)lastNameFirstNameString;
@end

实现:

#import "XYZPerson+XYZPersonNameDisplayAdditions.h"
 
@implementation XYZPerson (XYZPersonNameDisplayAdditions)
- (NSString *)lastNameFirstNameString {
    return [NSString stringWithFormat:@"%@, %@", self.lastName, self.firstName];
}
@end

然后可以像实例方法一样使用

类别的局限

  1. 无法扩展数据
  2. 与原类方法名称冲突,类别具有更高的优先级

类别的作用

  1. 将类的实现分散到多个文件及多个框架中
  2. 创建对私有方法的前向引用,(非正式协议,现在基本都用正式协议了)
    objective-c中没有真正的私有方法,只要知道某个对象有某个方法,就可以向这个对象发送这个消息。
    一般定义私有方法的方法是:在@implementation中实现在@interface中未声明的方法,但这样编译器会发出警告或错误,这个时候,我们可以定义一个私类别,在类别中声明这个方法,这样编译器就不会发出警告了。
    #import "FirstClass.h"
    #import "FirstClass+Extended.h"
    
    @implementation FirstClass
    - (void) privateMethod
    {
        NSLog("Private Method");
    }
    @end

     

posted @ 2013-08-08 16:04  万有引用  阅读(193)  评论(0编辑  收藏  举报