h
#import <Foundation/Foundation.h> NS_ASSUME_NONNULL_BEGIN //字符串对象 最好使用copy, 防止受外部的影响 @interface Person : NSObject <NSCopying> @property(nonatomic,copy)NSString* name; // retain 浅复制 copy 深复制 @property(nonatomic,retain)NSString* age; -(void)show; @end
m
#import "Person.h" @implementation Person -(void)show { NSLog(@"name:%@,age:%ld",_name,(long)[_age integerValue]); } -(id)copyWithZone:(NSZone *)zone { Person* p =[[Person alloc]init]; p.name=_name; p.age=_age; //retain 浅复制 // p.age=[_age copy]; copy 深复制 return p; } @end
main
#import <Foundation/Foundation.h> #import "Person.h" int main(int argc, const char * argv[]) { @autoreleasepool { NSMutableString* str=[NSMutableString stringWithString:@"lisi"]; Person* p =[[Person alloc]init]; p.name=str; [p show]; // 修改字符串对象的内容 person的名字一起改变 NSString* str2=[str copy]; [str appendString:@"2"]; NSLog(@"str2:%@",str2); p.age=[NSNumber numberWithInteger:25]; [p show]; //Person copyWithZone // 自定义的对象如果要支持copy操作,必须实现copyWithZone : 方法 Person* p2 =[p copy]; p.age=[NSNumber numberWithInteger:35]; [p2 show]; } return 0; }