NSString与NSMutableString的使用场景

项目中经常会遇到字符串的处理工作,从我个人习惯来说,我比较倾向于使用NSString。但是既然系统提供了NSMutableString,就一定会有他的优势的。

别人的博客针对这两个类进行了比较详细的比较,接下来,以我认为便于记忆的方式将这两个类的使用场景做个总结。

  1. 如果对字符串进行频繁的修改,要使用NSMutableString
  2. 如果对字符串进行偶尔的修改,要使用NSString

注意,在使用NSMutableString作为属性的时候,该使用copy还是strong呢?

首先,看下测试用例:

- (void)testEx
{
    NSString *string = [NSString stringWithFormat:@"abc"];
    NSMutableString *mString = [NSMutableString stringWithString:string];
    NSLog(@"todo --- %@ -- %@", [string class], [mString class]);
    NSLog(@"todo --- %@ -- %@", [[string copy] class], [[mString copy] class]);
    NSLog(@"todo --- %@ -- %@", [[string mutableCopy] class], [[mString mutableCopy] class]);

    // 打印日志:
    /*
    2018-08-22 15:56:04.936770+0800 CouponPurchase[27023:3516880] todo --- NSTaggedPointerString -- __NSCFString
    2018-08-22 15:56:04.936943+0800 CouponPurchase[27023:3516880] todo --- NSTaggedPointerString -- NSTaggedPointerString
    2018-08-22 15:56:04.937210+0800 CouponPurchase[27023:3516880] todo --- __NSCFString -- __NSCFString
    */
}

可以看到,不管NSString还是NSMutableString类型,经过copy之后都是NSTaggedPointerString类型。所以当NSMutableString作为属性时,应该使用strong,才能保证属性的类型不会发生变化。

测试用例如下:

@property (nonatomic, strong) NSMutableString *sstring;
@property (nonatomic, copy) NSMutableString *cstring;

- (void)testnx
{
    NSString *string = [NSString stringWithFormat:@"abc"];

    self.sstring = [NSMutableString stringWithString:string];
    self.cstring = [NSMutableString stringWithString:string];

//    [_sstring deleteCharactersInRange:NSMakeRange(0, 1)];
//    [_cstring deleteCharactersInRange:NSMakeRange(0, 1)];
    NSLog(@"todo --- %@ -- %@", [_sstring class], [_cstring class]);

    self.sstring = [NSMutableString stringWithString:string];
    self.cstring = [NSMutableString stringWithString:string];
    NSLog(@"todo --- %@ -- %@", [_sstring class], [_cstring class]);

    // 打印日志:
    /*
     2018-08-22 16:14:52.757416+0800 CouponPurchase[30735:3572671] todo --- __NSCFString -- NSTaggedPointerString
     2018-08-22 16:14:52.757698+0800 CouponPurchase[30735:3572671] todo --- __NSCFString -- NSTaggedPointerString
     */
}

可以看到使用copy修饰,实例变量的类型确实会发生变化。

  • 当使用NSMutableString作为实例变量时,务必使用strong修饰。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值