类别(category)
类别的声明
#import <Foundation/Foundation.h> @interface NSString (NumberConvenience) -(NSNumber *) lenthAsNumber; @end
声明部分有几个非常有趣的特点。
类别的实现
#import "NSString+NumberConvenience.h" @implementation NSString (NumberConvenience) -(NSNumber *) lenthAsNumber { //获取客串的长度值 NSUInteger length =[self length]; return ([NSNumber numberWithUnsignedInt:length]); } @end
类别的实现与声明部分相似。
main函数的实现
#import <Foundation/Foundation.h> #import "NSString+NumberConvenience.h" int main(int argc, const char * argv[]) { @autoreleasepool { NSMutableDictionary *dict =[NSMutableDictionary dictionary]; [dict setObject:[@"hello" lenthAsNumber] forKey:@"hello"]; [dict setObject:[@"once time" lenthAsNumber] forKey:@"once time"]; NSLog(@"%@",dict); } return 0; }
通过以上步骤我们完成了让程序接收一系列的字符串,然后确定每个字符串的长度并存入到字典中。
这是有几点需要说明
类扩展
类扩展的特点
#import <Foundation/Foundation.h> @interface Things : NSObject @property (assign) NSInteger thing1; @property (readonly,assign) NSInteger thing2; -(void)resetAllValues; @end #import "Things.h" @interface Things () { NSInteger thing4; } @property (readwrite,assign) NSInteger thing2; @property (assign) NSInteger thing3; @end
这里没有继承的类,我们所做的基本上就是获取Things类,并通过私有属性和方法来扩展它。在这里我们修改了thing2读写权限,我们还添加了私有属性thing3,它只可以在这个类内部使用,另外还添加了thing4这个实例变量,它同样是私有的。
类别的优势与缺陷
优点:
缺陷:
类别和继承
原文:http://www.cnblogs.com/xinianhao/p/3768505.html