zoukankan      html  css  js  c++  java
  • 继承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等
  • 相关阅读:
    PacificA协议小结
    raft协议小结
    python爬虫抓取图片
    composer 的使用和常用命令大全
    php批量同步数据
    VMware虚拟机的安装与配置
    国家和地区代码表
    js判断h5页面地址的打开方式(微信、pc、移动端)
    phpexcel图片获取
    python的文件操作及简单的用例
  • 原文地址:https://www.cnblogs.com/zhubaofeng/p/5256291.html
Copyright © 2011-2022 走看看