分类(Category)
分类作为一种编译的手段,允许通过类添加方法来扩展原有类。但只能是方法,不能够添加实例变量的扩展。常用文件名 类名+分类名.h(.m)
Pay attention here, 分类名不用和方法名一样,标示符而已。
举例说明,扩展NSNumber的类:
//NSNumber+Message.h
#import <Foundation/Foundation.h>
@interface NSNumber (Message)
-(NSString *)errorMessage; //分类扩展方法
@end
//NSNumber+Message.m
#import "NSNumber+Message.h"
@implementation NSNumber (Message)
-(NSString *)errorMessage {
NSString *errorStr = @"";
switch ([self integerValue]) {
case 0:
errorStr = @"不会是我。";
break;
case 1:
errorStr = @"所以是我。";
break;
default:
break;
}
return errorStr;
}
@end
调用 errorMessage()
//main.m
#import <UIKit/UIKit.h>
//导入分类方法
#import "NSNumber+Message.h"
int main(int argc, char * argv[]) {
NSNumber *hah = [NSNumber numberWithInt:1];
NSString *result = [hah errorMessage];//这样可以直接调用了,看似直接调用NSNumber类方法。
NSLog(@"%@", result);
}
扩展(Extension)
.h 文件内存放的都是一些public型的变量以及方法,通过扩展可以扩充,但是扩充的变量或者方法写在 .m 文件里。
// Test.m
/* 下面*str和setStr:方法是属于扩展内容,变量用大括号括起来,而它们都是Test类的家藏 */
@interface Test() {
NSString *str;
}
- (void)setStr:(NSString *)what;
@end