继承NSString,NSArray 怎么写

Posted LLLLLuke

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了继承NSString,NSArray 怎么写相关的知识,希望对你有一定的参考价值。

今天在进行一个字符串测试的时候,自定义了一个继承自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 怎么写的主要内容,如果未能解决你的问题,请参考以下文章

将 NSString 转换为字符的 NSArray [重复]

iPhone SDK 中的 NSMutableArray、NSArray、NSString 内存泄漏

如何将 NSArray 元素加入 NSString?

OBC: NSString 与 NSArray 互转

如何在 NSString 中获取 NSArray 对象并一一发送该对象?

在ios中将NSString拆分为NSArray