Object-C 分类(Category) 和 扩展(Extension)

来源:互联网 发布:linux系统root密码 编辑:程序博客网 时间:2024/05/22 12:36

分类(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
0 0
原创粉丝点击