标签:
今天在进行一个字符串测试的时候,自定义了一个继承自NSString的类,但是出现了一些问题,查阅官方文档后得到了下面这些结论
在Objective-C中,对于NSString、NSArray等一些系统的基础类,苹果公司不推荐继承创建新类的,要想给它们扩展功能只能给它们添加新的categroy(类目)。 但是直接继承的话,也是可行的,只是会出现各种问题 以NSString为例 首先,创建一个NSString的子类 BFString,不添加任何方法和属性 直接创建一个BFString的实例对象,是没有问题的 BFString *str = [[BFString alloc]init]; 但是如果使用其他初始化方法,比如 BFString *str = [BFString stringWithFormat:@"test"];
运行结果:
查看官方文档后: 要为string中的字符提供存储机制,这些存储机制可以是静态数组、动态分配的缓存、NSString的对象或者是其他数据类型。 首先是需要为子类的字符串提供存储机制,其次还要实现两个方法 @interface BFString : NSString { NSString *_backingStore; } @end 然后在实现方法中,覆写以上两个方法length和characterAtIndex:,当然也要覆写一下初始化方法 @implementation BFString - (id)initWithString:(NSString *)aString { if (self = [self init]) { _backingStore = [[NSString stringWithString:aString] copy]; } return self; } - (NSUInteger)length { return [_backingStore length]; } - (unichar)characterAtIndex:(NSUInteger)index { return [_backingStore characterAtIndex:index]; } @end 将字符串存储在_backingStore之中,然后通过读取该字符串来获得子类字符串的长度和字符 现在,继承NSString的这个子类就没有问题了。 这个做法同样适用于NSArray、NSDictionary、NSNumber等
标签:
原文地址:http://www.cnblogs.com/zhubaofeng/p/5256291.html