Objective-C:浅复制(拷贝)
生活随笔
收集整理的這篇文章主要介紹了
Objective-C:浅复制(拷贝)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
淺復制:復制對象時,如果對象中包含對象類型的實例變量,只是復制指針。新對象中的對象類型實例變量和舊對象中的對象類型實例變量指的是同一個對象。任何一方實例變量對對象做修改,另一方實例變量指向的該對象也就改變了。
.h聲明文件
1 // Person.h 2 // 03-對象復制 3 // 4 // Created by ma c on 15/8/14. 5 // Copyright (c) 2015年. All rights reserved. 6 // 7 8 #import <Foundation/Foundation.h> 9 10 @interface Person : NSObject<NSCopying>//實現NSCopying協議才能支持自定義對象的復制11 @property(nonatomic,retain)NSMutableString *name;//(retain)淺拷貝,拷貝對象的引用,其實用的還是一個對象,相當于一個人給自己起了一個別名 12 @property(nonatomic,assign)NSInteger age; 13 -(id)initWithName:(NSMutableString*)name andAge:(NSInteger)age; 14 -(void)show; 15 @end
.m實現文件
1 // Person.m 2 // 03-對象復制 3 // 4 // Created by ma c on 15/8/14. 5 // Copyright (c) 2015年. All rights reserved. 6 // 7 8 #import "Person.h" 9 10 @implementation Person 11 -(id)initWithName:(NSMutableString*)name andAge:(NSInteger)age 12 { 13 self = [super init]; 14 if(self) 15 { 16 _name = [name retain];//強引用,獲得對象所有權 17 _age = age; 18 } 19 return self; 20 } 21 -(void)show 22 { 23 NSLog(@"name:%@,age:%lu",_name,_age); 24 } 25 -(void)dealloc 26 { 27 [_name release]; 28 [super dealloc]; 29 } 30 -(id)copyWithZone:(NSZone *)zone 31 { 32 return [[Person alloc]initWithName:_name andAge:_age]; 33 } 34 @end? main.m主函數
1 // main.m 2 // 03-對象復制 3 // 4 // Created by ma c on 15/8/14. 5 // Copyright (c) 2015年. All rights reserved. 6 // 7 8 #import <Foundation/Foundation.h> 9 #import "Person.h" 10 int main(int argc, const char * argv[]) { 11 @autoreleasepool { 12 // 測試Person類 13 NSMutableString *name = [NSMutableString stringWithString:@"Tom"]; 14 15 Person *p1 = [[Person alloc]initWithName:name andAge:20]; 16 [p1 show]; 17 18 [name appendString:@"Jerry"]; 19 20 Person *p2 = [[Person alloc]initWithName:name andAge:21]; 21 [p2 show]; 22 23 [p1 show]; 24 25 //對象復制,自定義對象必須要實現NSCopying協議才能支持對象復制 26 Person *p3 = [p1 copy]; 27 [p3 show]; 28 29 [p1.name appendString:@"123"];//因為retain,p1和p2指向同一對象,一改都改 30 [p3 show]; 31 32 NSMutableString *name2 = [NSMutableString stringWithString:@"Jobs"]; 33 [p1 setName:name2];//p1和p3指向的是不同的對象,互不影響 34 [p3 show]; 35 36 [p1 release]; 37 [p2 release]; 38 [p3 release]; 39 } 40 return 0; 41 }測試結果如下:
2015-08-14 16:40:59.293 03-對象復制[1460:96685] name:Tom,age:20 2015-08-14 16:40:59.294 03-對象復制[1460:96685] name:TomJerry,age:21 2015-08-14 16:40:59.294 03-對象復制[1460:96685] name:TomJerry,age:20 2015-08-14 16:40:59.295 03-對象復制[1460:96685] name:TomJerry,age:20 2015-08-14 16:40:59.295 03-對象復制[1460:96685] name:TomJerry123,age:20 2015-08-14 16:40:59.295 03-對象復制[1460:96685] name:TomJerry123,age:20 Program ended with exit code: 0?
程序猿神奇的手,每時每刻,這雙手都在改變著世界的交互方式!本文轉自當天真遇到現實博客園博客,原文鏈接:http://www.cnblogs.com/XYQ-208910/p/4730496.html,如需轉載請自行聯系原作者
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀
總結
以上是生活随笔為你收集整理的Objective-C:浅复制(拷贝)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 云安全趋势下脚踏实地力拼网络危胁
- 下一篇: CentOS-7.2、7.5模板机制作