自定义对象 深copy ios 属性很多怎么办
答案:1 悬赏:40 手机版
解决时间 2021-11-24 20:45
- 提问者网友:酱爆肉
- 2021-11-24 17:19
自定义对象 深copy ios 属性很多怎么办
最佳答案
- 五星知识达人网友:空山清雨
- 2021-11-24 18:38
象复制有两种,一种是foudation中自己的对象,包括NSString,NSArray,NSMutableArray,NSDictionary,等等,第二种就是自定义对象的复制;其实要实现复制,必须要实现两个协议,对于前者,系统已经默认给实现了,而对于后者则必须自己实现。
首先,说说第一种(NSString等)对象复制的各种情况,举例如下:
#import
#import "Car.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
// insert code here...
NSArray *array1 = [[NSArray alloc] initWithObjects:@"one",@"two",@"three",@"four",nil];
NSMutableArray *array2 = [[NSMutableArray alloc]initWithObjects:@"one",@"two",@"three",@"four", nil];
NSArray *array1Copy = [array1 copy];
NSArray *array2Copy = [array2 copy];
NSArray *array1MutableCopy = [array1 mutableCopy];
NSArray *array2MutableCopy = [array2 mutableCopy];
NSLog(@"array1地址:%p,array2地址:%p,array1Copy地址:%p,array2Copy地址:%p,array1MutableCopy地址:%p,array2MutableCopy地址:%p",array1,array2,array1Copy,array2Copy,array1MutableCopy,array2MutableCopy);
}
return 0;
}
结果说明:将第一种又可分为两种,一种是不可变如NSArray,一种是可变如NSMutableArray。
a:对于不可变的对象,如果进行copy复制,那么此时的copy相当于retain,并没有开辟新的内存,但是如果是进行mutableCopy则是进行了新内存的开辟,此时只是计数加1而已;
b:对于可变对象,则不管是copy还是mutableCopy,都开辟了新的内存空间。
首先,说说第一种(NSString等)对象复制的各种情况,举例如下:
#import
#import "Car.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
// insert code here...
NSArray *array1 = [[NSArray alloc] initWithObjects:@"one",@"two",@"three",@"four",nil];
NSMutableArray *array2 = [[NSMutableArray alloc]initWithObjects:@"one",@"two",@"three",@"four", nil];
NSArray *array1Copy = [array1 copy];
NSArray *array2Copy = [array2 copy];
NSArray *array1MutableCopy = [array1 mutableCopy];
NSArray *array2MutableCopy = [array2 mutableCopy];
NSLog(@"array1地址:%p,array2地址:%p,array1Copy地址:%p,array2Copy地址:%p,array1MutableCopy地址:%p,array2MutableCopy地址:%p",array1,array2,array1Copy,array2Copy,array1MutableCopy,array2MutableCopy);
}
return 0;
}
结果说明:将第一种又可分为两种,一种是不可变如NSArray,一种是可变如NSMutableArray。
a:对于不可变的对象,如果进行copy复制,那么此时的copy相当于retain,并没有开辟新的内存,但是如果是进行mutableCopy则是进行了新内存的开辟,此时只是计数加1而已;
b:对于可变对象,则不管是copy还是mutableCopy,都开辟了新的内存空间。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯