日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Objective-C:浅复制(拷贝)

發(fā)布時(shí)間:2025/7/14 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Objective-C:浅复制(拷贝) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

淺復(fù)制:復(fù)制對(duì)象時(shí),如果對(duì)象中包含對(duì)象類型的實(shí)例變量,只是復(fù)制指針。新對(duì)象中的對(duì)象類型實(shí)例變量和舊對(duì)象中的對(duì)象類型實(shí)例變量指的是同一個(gè)對(duì)象。任何一方實(shí)例變量對(duì)對(duì)象做修改,另一方實(shí)例變量指向的該對(duì)象也就改變了。

  .h聲明文件

1 // Person.h 2 // 03-對(duì)象復(fù)制 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>//實(shí)現(xiàn)NSCopying協(xié)議才能支持自定義對(duì)象的復(fù)制

11 @property(nonatomic,retain)NSMutableString *name;//(retain)淺拷貝,拷貝對(duì)象的引用,其實(shí)用的還是一個(gè)對(duì)象,相當(dāng)于一個(gè)人給自己起了一個(gè)別名 12 @property(nonatomic,assign)NSInteger age; 13 -(id)initWithName:(NSMutableString*)name andAge:(NSInteger)age; 14 -(void)show; 15 @end

  .m實(shí)現(xiàn)文件

1 // Person.m 2 // 03-對(duì)象復(fù)制 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];//強(qiáng)引用,獲得對(duì)象所有權(quán) 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主函數(shù)

1 // main.m 2 // 03-對(duì)象復(fù)制 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 // 測(cè)試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 //對(duì)象復(fù)制,自定義對(duì)象必須要實(shí)現(xiàn)NSCopying協(xié)議才能支持對(duì)象復(fù)制 26 Person *p3 = [p1 copy]; 27 [p3 show]; 28 29 [p1.name appendString:@"123"];//因?yàn)閞etain,p1和p2指向同一對(duì)象,一改都改 30 [p3 show]; 31 32 NSMutableString *name2 = [NSMutableString stringWithString:@"Jobs"]; 33 [p1 setName:name2];//p1和p3指向的是不同的對(duì)象,互不影響 34 [p3 show]; 35 36 [p1 release]; 37 [p2 release]; 38 [p3 release]; 39 } 40 return 0; 41 }

  測(cè)試結(jié)果如下:

2015-08-14 16:40:59.293 03-對(duì)象復(fù)制[1460:96685] name:Tom,age:20 2015-08-14 16:40:59.294 03-對(duì)象復(fù)制[1460:96685] name:TomJerry,age:21 2015-08-14 16:40:59.294 03-對(duì)象復(fù)制[1460:96685] name:TomJerry,age:20 2015-08-14 16:40:59.295 03-對(duì)象復(fù)制[1460:96685] name:TomJerry,age:20 2015-08-14 16:40:59.295 03-對(duì)象復(fù)制[1460:96685] name:TomJerry123,age:20 2015-08-14 16:40:59.295 03-對(duì)象復(fù)制[1460:96685] name:TomJerry123,age:20 Program ended with exit code: 0

?

程序猿神奇的手,每時(shí)每刻,這雙手都在改變著世界的交互方式!

本文轉(zhuǎn)自當(dāng)天真遇到現(xiàn)實(shí)博客園博客,原文鏈接:http://www.cnblogs.com/XYQ-208910/p/4730496.html,如需轉(zhuǎn)載請(qǐng)自行聯(lián)系原作者
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的Objective-C:浅复制(拷贝)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。