使用类别可以扩展类的功能,不管该类的源码是否存在都可以扩展,和继承的最大不同就是类别中的方法可以访问被扩展类的私有元素。
#import "Person.h"@interface Person(PersonLife)@end@implementation Person(PersonLife)@end
使用的时候导入 #import "Person+PersonLife"
#import "Person+PersonLife.h"int main(int argc, const char * argv[]){@autoreleasepool {Person *p = [[Person alloc] init];}return 0;}
类扩展是一种特殊的类别,在声明的时候Person() ,括号里不要写名字。
#import <Foundation/Foundation.h>// Person 类@interface Person : NSObject// Person 类公开的方法-(void) print ;@end
// 引入原类#import "Person.h"// 扩展,扩展中定义私有元素@interface Person ()// 私有属性@property NSString *name ;// 私有方法-(void) privateMethod ;@end
#import "PersonPrivate.h"@implementation Person// 生成私有getter、setter 方法@synthesize name ;// 实现公开方法-(void) print{[self privateMethod];}// 实现私有方法-(void) privateMethod{NSLog(@"private Method Execute ~~") ;}@end
// 引入Person 类#import "Person.h"int main(int argc, const char * argv[]){@autoreleasepool {Person *p = [[Person alloc] init];// 调用类公开的方法[p print] ;// p.name ; 报错// [p privateMethod] ; 报错,name的getter、setter方法和privateMethod都是私有元素,外部无法调用}return 0;}
原文:http://www.cnblogs.com/mrwu/p/4331156.html