黑马程序员——IOS基础——Copy

-------  android培训 java培训 、期待与您交流!

1⃣️一个对象使用copy或mutableCopy方法可以创建对象的副本

2⃣️copy - 需要先实现NSCoppying协议,创建的是不可变副本(如:NSString、NSArray、NSDictionary)

3⃣️mutableCopy - 需要先实现NSMutableCopying协议,创建的是可变副本(如:NSMutableString、NSMutableArray、NSMutableDictionary)

4⃣️深复制:内容拷贝,源对象和副本指向的是同一个对象。对象的引用计数器+1,其实相当于做了一次retain操作

    只有一种情况是浅拷贝:不可变对象调用copy方法,并且浅拷贝情况下copy就相当于retain

#import <Foundation/Foundation.h>
#pragma mark 不可变字符串的拷贝(深拷贝)
void stringMutablecopy(){//string调用Mutablecopy
    NSString *string = [[NSString alloc] initWithFormat:@"age is %i",10];
    //产生了一个新对象,计数器为1,源对象的计数器不变
    //str:1  string:1
    NSMutableString *str = [string mutableCopy];
    //str和string不是相同对象
    NSLog(@"stringMutablecopy:%i",str==string);//返回0
    //改变str不会改变string
    [str appendString:@"abcd"];
    NSLog(@"string:%@",string);
    NSLog(@"str:%@",str);
}
#pragma mark 不可变字符串的拷贝(浅拷贝)
void stringCopy(){//string调用copy
    //copy产生的是不可变副本,由于源对象本身就是不可变,所以为了性能着想,copy会直接返回源对象本身
    //源对象计数器会+1
    NSString *string2 = @"age is 10";
    NSString *str2 = [string2 copy];
    NSLog(@"stringCopy():%i",str2 == string2);
}
#pragma mark 可变字符串的copy(深拷贝)
void mutableStringCopy(){//mutableString调用copy
    NSMutableString *string = [NSMutableString stringWithFormat:@"age is %i",10];
    NSString *str = [string copy];
    NSLog(@"mutableStringCopy():%i",str ==string);
}
#pragma mark 可变字符串的MutableCopy(深拷贝)
void mutableStringMutableCopy(){//mutableString调用copy
    NSMutableString *string = [NSMutableString stringWithFormat:@"age is %i",10];
    NSString *str = [string mutableCopy];
    NSLog(@"mutableStringMutableCopy():%i",str ==string);
}
int main()
{
    mutableStringMutableCopy();//可变字符串的MutableCopy(深拷贝)
    mutableStringCopy();//可变字符串的copy(深拷贝)
    stringCopy();//不可变字符串的copy(浅拷贝)
  stringMutablecopy();//不可变字符串的MutableCopy(深拷贝)
    return 0;
}


-------  android培训 java培训 、期待与您交流!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值