Objective-C Copy语法(一)对于Objective-C 提供的类对象NSString/NSMutableString; NSArray/NSMutableArray...

@在Objective-C 语法中,提供了Copy语法(Copy + MutableCopy)用于对象的拷贝,其中有2个含义 浅拷贝和深拷贝

    // 浅拷贝:指针拷贝,不会产生新的对象。源对象计数器+1

    // 深拷贝:内容拷贝,会产生新的对象。新对象计数器置为1,源对象计数器不变。

NSString/NSMutableString:(NSArray/NSMutableArray同理)

   ①对于 mutableCopy ,一定是深拷贝。
   ②对于 copy:( 只有一种情况下是发生浅拷贝:不可变对象 复制到 不可变对象。)
                       如果是 NSString ---> NSString;则是浅拷贝;
                       如果是 NSMutableString ---> NSString;则是深拷贝。
                       如果是 NSString 、NSMutableString ---> NSMutableString;则是深拷贝。

#pragma mark 不可变字符串的拷贝(浅拷贝)
void stringCopy() {
    NSString *string = [NSString stringWithFormat:@"money is %i", 10000];
    NSLog(@"%zi", [string retainCount]);
    
    // copy产生的是不可变副本,由于源对象本身就不可变,所以为了性能着想,copy会直接返回源对象本身
    // 源对象计数器会+1
    // 在浅拷贝情况下,copy其实就相当于retain
    NSString *str = [string copy];
    NSLog(@"%zi", [string retainCount]);
}


#pragma mark 可变字符串的copy(深拷贝)
void mutableStringCopy() {
    NSMutableString *string = [NSMutableString stringWithFormat:@"money is %i", 10000];
    
    // 会产生一个新对象,str计数器为1
    NSString *str = [string copy];
    
    
}

#pragma mark 可变字符串的MutableCopy(深拷贝)
void mutableStringMutableCopy() {
    NSMutableString *string = [NSMutableString stringWithFormat:@"money is %i", 10000];
    
    // 会产生一个新对象,str计数器为1
    NSMutableString *str = [string mutableCopy];
    
    [str appendString:@"1234"];
    
    NSLog(@"str:%@", str);
    NSLog(@"string:%@", string);
     
}



  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值