copy和mutableCopy

本文详细解析了在Objective-C中,数组、字典和字符串的copy与mutableCopy操作的区别,包括引用计数的变化、内存地址的比较以及拷贝深度的探讨。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数组的copy和mutableCopy

1、person * str0=[person new];

   NSArray* array1=[NSArray arrayWithObjects:str0, nil];

   此时 对象str0的引用计数为2

2.person * str0=[person new];

  NSArray* array1=[NSArray arrayWithObjects:str0, nil];

  NSArray* array2=[array1 copy];

    此时对象str0的引用计数为2 array1的引用计数为2 

   array1 和array2的内存地址相同

 

1.1对不可变数组copy操作 不增加原对象的引用计数 增加数组的引用计数 此时针对的数组来说是浅拷贝 拷贝指针

 

    person * str0=[person new];

  NSArray* array1=[NSArray arrayWithObjects:str0, nil];

  NSMutableArray* array3=[array1 mutableCopy];

  此时对象str0的引用计数为3 array1的引用计数为1

  array1 和array2的内存地址不相同 

1.2对不可变数组mutableCopy操作 增加对象的引用计数 不增加原数组的引用计数 

 

1.3对可变数组Copy操作 对象的引用计数不发生改变 不增加原数组的引用计数 

 

1.4对可变数组mutableCopy操作 对象的引用计数不发生改变 不增加原数组的引用计数

  

 

字典的的copy和mutableCopy

 

2.1对不可变的字典进行copy操作 原字典的引用计数+1 原字典中的value对像引用计数不变 原字典与新创建的字典的内存地址相同 原字典元素的引用计数不变  浅拷贝 

 

2.2对不可变的字典进行mutableCopy操作 原字典的引用计数不变  原字典与新创建的字典的内存地址相同 原字典元素的引用计数+1

 

2.3对可变字典Copy操作 对象的引用计数不发生改变 不增加原字典的引用计数 

 

2.4对可变字典mutableCopy操作 对象的引用计数不发生改变 不增加原字典的引用计数

 

字符串的分类以及copy和mutableCopy操作

对堆区的不可变字符串copy操作是浅拷贝 不改变类型 增加引用计数 mutableCopy深拷贝 -》堆区  可变字符串无论是copy还是mutablecopy都是深拷贝

    //静态变量

    NSString* constant1=@"abcd";

    //静态变量

    NSString* constant2=@"abc";

    //静态变量

    NSString* constant3=[constant1 copy];

    //静态变量

    NSString* constant6=[[NSString alloc] initWithString:constant1];

    //字符串对象 堆区

    NSString* constant4=[constant1 mutableCopy];

    //tag point 类型 字母或者数字小于11位是tagpoint类型否则是string类型 汉字是string

    NSString* constant5=[NSString stringWithFormat:@"1233"];

 

 

 

    copy ,strong

   1 字符串是不可变字符串 ,此时属性使用strong和copy ,修改原字符串属性的值均不改变,深拷贝内存

   2 字符串是可变字符串 ,此时属性使用copy,修改原字符串属性的值不改变,深拷贝内存;属性使用strong,修改原字符串属性的值伴随着原字符串改变,浅拷贝

 

  3 可变数组 ,此时属性使用copy,修改原数组中元素的值,属性数组内元素不改变,深拷贝内存;属性使用strong,修改原数组中元素的值属性的值伴随着原数组改变,浅拷贝 

 

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值