数组的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,修改原数组中元素的值属性的值伴随着原数组改变,浅拷贝