#import <Foundation/Foundation.h>
// 自定义对象
@interface CustomObject : NSObject
@end
@implementation CustomObject
@end
int main(int argc, const char * argv[]) {
@autoreleasepool {
// 创建包含多个自定义对象的NSArray
NSMutableArray *originalArray = [NSMutableArray array];
for (int i = 0; i < 3; ++i) {
[originalArray addObject:[[CustomObject alloc] init]];
}
// 浅拷贝
NSArray *shallowCopyArray = [originalArray copy];
// 深拷贝
NSArray *deepCopyArray = [NSMutableArray arrayWithArray:originalArray copyItems:YES];
// 打印原数组对象内存地址
NSLog(@"原数组对象内存地址:");
for (CustomObject *obj in originalArray) {
NSLog(@"%p", obj);
}
// 打印浅拷贝数组对象内存地址
NSLog(@"浅拷贝数组对象内存地址:");
for (CustomObject *obj in shallowCopyArray) {
NSLog(@"%p", obj);
}
// 打印深拷贝数组对象内存地址
NSLog(@"深拷贝数组对象内存地址:");
for (CustomObject *obj in deepCopyArray) {
NSLog(@"%p", obj);
}
// 结果解释
/*
- 原数组:存放了自定义对象的内存地址。
- 浅拷贝数组:浅拷贝对于不可变对象(如NSArray)是指针拷贝,即浅拷贝数组和原数组指向同一块内存区域,所以浅拷贝数组中的对象内存地址与原数组相同。
- 深拷贝数组:深拷贝会递归地拷贝数组中的每个对象,所以深拷贝数组中的对象内存地址与原数组不同,是新创建的对象的内存地址。
*/
}
return 0;
}
- 原数组:存放自定义对象实例的内存地址。
- 浅拷贝数组:浅拷贝是指针拷贝,新数组和原数组指向同一块内存区域,所以浅拷贝数组中的对象内存地址与原数组相同。
- 深拷贝数组:深拷贝会递归地拷贝数组中的每个对象,所以深拷贝数组中的对象是新创建的,内存地址与原数组不同。