码迷,mamicode.com
首页 > 其他好文 > 详细

继承NSString,NSArray 怎么写

时间:2016-03-08 23:56:36      阅读:274      评论:0      收藏:0      [点我收藏+]

标签:

今天在进行一个字符串测试的时候,自定义了一个继承自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等

 

继承NSString,NSArray 怎么写

标签:

原文地址:http://www.cnblogs.com/zhubaofeng/p/5256291.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!