所谓的深拷贝和浅拷贝只有指针才存在这样的概念。
.h文件 Person类
#import <Foundation/Foundation.h>
@interface Person : NSObject<NSCopying>
{
int age;
NSString *name;
}
@property(nonatomic,assign) int age;
@property(nonatomic,retain) NSString *name;
@end
.m文件
#import "Person.h"
@implementation Person
@synthesize age;
@synthesize name;
- (id)init
{
self = [super init];
if (self) {
self.age=20;
self.name=@"xiaoming";
}
return self;
}
- (void)dealloc
{
[name release];
[super dealloc];
}
-(id)copyWithZone:(NSZone *)zone
{
Person *p=[[Person alloc]init];
p.age= self.age;
// p.name=self.name; //浅拷贝
p.name=[self.name copy]; //深拷贝
return p;
}
@end
主函数
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
Person *per=[[Person alloc]init];
NSLog(@"%d,%@",per.age,per.name);
NSMutableString *str=[NSMutableString stringWithFormat:@"xiaoming"];
per.name=str;
per.age=21;
NSLog(@"%d,%@",per.age,per.name);
Person *per2=[[Person alloc]init];
per2=[per copy];
NSLog(@"%d,%@",per2.age,per2.name);
[str appendString:@"2"];
NSLog(@"%d,%@",per.age,per.name);
NSLog(@"%d,%@",per2.age,per2.name);
[per release];
[per2 release];
}
return 0;
}