• 继承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等
  • 相关阅读:
    CREATE AGGREGATE
    技术文档列表
    jQuery 判断表单中多个 input text 中至少有一个不为空
    Java实现 蓝桥杯 算法提高 奥运会开幕式
    Java实现 蓝桥杯 算法提高 最长滑雪道
    Java实现 蓝桥杯 算法提高 最长滑雪道
    Java实现 蓝桥杯 算法提高 最长滑雪道
    Java实现 蓝桥杯 算法提高 最大值路径
    Java实现 蓝桥杯 算法提高 最大值路径
    Java实现 蓝桥杯 算法提高 最大值路径
  • 原文地址:https://www.cnblogs.com/zhubaofeng/p/5256291.html
Copyright © 2020-2023  润新知