亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

copy,retain,strong的區別

2019-11-08 00:19:55
字體:
來源:轉載
供稿:網友

      之前的編碼中,對于NSString的PRoperty修飾,習慣性使用copy,只是粗略的知道copy屬于深復制,retain/strong屬于淺復制,并沒有對其深究。最近需要詳細了解這一塊知識,在網上搜索相關內容,并且用代碼驗證,查看對比了內存地址,做一些總結。

        一、之前對于copy和retain/strong的區別理解是這樣的:

        copy是復制了源對象所在內存空間的數據,放入目的對象指針指向的內存空間,并且令目的對象引用計數為1,對于源對象的引用計數沒有影響;源對象內容的改變不會影響到目的對象。

       retain/strong是目的對象指針指向源對象的內存空間,源對象的引用計數+1;源對象的改變會影響到目的對象。

       

      mutablecopy返回的是可變的對象,copy返回的是不可變的對象。

       二、代碼驗證探究

     1、源對象為不可變 NSString

   

[objc] view plain copy 在CODE上查看代碼片NSString*str = @"test";  NSString* retainStr = [str retain];  NSString* copyStr = [str copy];  NSMutableString* mcopyStr = [str mutableCopy];  NSLog(@"str addr = %p",str);  NSLog(@"retainStr addr = %p",retainStr);  NSLog(@"copyStr addr = %p",copyStr);  NSLog(@"mcopyStr addr = %p",mcopyStr);  輸出如下:

       

[html] view%20plain copy str addr = 0x4598  retainStr addr = 0x4598  copyStr addr = 0x4598  mcopyStr addr = 0x8caf630  分析:

retain的對象毫無懸念,還是源對象的內存地址;

copy的對象和我原來想的不一樣,竟然和retain一樣,也是源對象地址;這意味者并沒有對源對象內容進行復制,而只是復制了指針而已。如此看來copy方法并不一定會復制源對象的內容。之所以復制,肯定是因為兩個版本有所不同。而這里源對象是NSString不可變的,copy返回的也是不可變的,既然都不可變,那么這里的副本就沒有多大意義存在,就如同使用字符串常量,系統會為我們優化,聲明多個字符串,都是不可變且內容相同,那么系統就只申請一塊內存,這個道理是一樣的。指向一塊內存就可以了,所以這里的copy和retain的作用是一樣的。

mutablecopy的對象地址和源對象地址不同,說明重新開辟了內存,復制了一個副本。因為mutablecopy返回的對象是可變的,它的變動會影響到源對象,所以需要拷貝一份。

源對象為可變的NSMutableString

[html] view%20plain copy NSMutableString* str = [NSMutableString stringWithString:@"test"];  NSString* retainStr = [str retain];  NSString* copyStr = [str copy];  NSMutableString* mcopyStr = [str mutableCopy];  NSLog(@"str addr = %p",str);  NSLog(@"retainStr addr = %p",retainStr);  NSLog(@"copyStr addr = %p",copyStr);  NSLog(@"mcopyStr addr = %p",mcopyStr);  輸出結果如下:

[html] view%20plain copy 派生到我的代碼片str addr = 0x8b7a130  retainStr addr = 0x8b7a130  copyStr addr = 0x8b751d0  mcopyStr addr = 0x8b7a170  

分析:

retain仍然和目的對象地址相同;

copy的地址和目的對象地址不相同,是因為源對象是可變的,目的對象不可變,當然需要兩個不同的版本;

mutablecopy形成了一個新的副本。因為兩個對象的改變會影響到對方,所以需要兩個版本。

得到的結論:

1、對于copy來說,如果源對象是不可變的,那么是淺拷貝,沒有必要深拷貝;如果源對象可變,為了安全性,深拷貝,生成副本。

2、對于mutablecopy來說,不管源對象是否可變,都是深拷貝。

因此我們在設置property的copy屬性時,如果希望對象跟著源對象的值變化,那么就是用retain;如果希望對象保持獨立的值,那就使用copy。當然這是在源對象為可變的情況下。

上面討論的是NSString相關的retain/copy/mutablecopy,在oc里面所有實現了NSCopying和NSMutableCopying協議的類,都具有copy和mutablecopy這兩個方法。這里引出了其他的oc對象的copy特性,它們是什么樣的,下一篇進行探究。

歡迎指正!  


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲黄色在线观看| 国产欧美精品在线播放| 日韩一区二区在线视频| 精品亚洲va在线va天堂资源站| 国产精品一区二区久久久| 日韩视频在线免费观看| 亚洲91精品在线观看| 亚洲国产精品va在线看黑人| 精品日韩美女的视频高清| 欧亚精品中文字幕| 国产日韩精品在线观看| 主播福利视频一区| 久久精品电影网| 91免费精品国偷自产在线| 深夜精品寂寞黄网站在线观看| 国产成人欧美在线观看| 欧美激情亚洲视频| 在线观看成人黄色| 91热精品视频| 青青草精品毛片| 91sao在线观看国产| 欧洲精品毛片网站| 亚洲美女在线看| 麻豆精品精华液| 国内伊人久久久久久网站视频| 日韩中文字幕视频在线观看| 成人国内精品久久久久一区| 欧美日韩国产丝袜另类| 欧美性猛交xxxx乱大交| 中文字幕无线精品亚洲乱码一区| 欧美最猛性xxxxx(亚洲精品)| 欧美在线视频在线播放完整版免费观看| 亚洲在线观看视频网站| 91美女福利视频高清| 精品成人69xx.xyz| 精品久久久久久久大神国产| 中文字幕久久久av一区| 亚洲视频777| 日韩视频免费在线| 91精品免费久久久久久久久| 欧美一级电影久久| 久久夜色精品国产亚洲aⅴ| 国产一区二区三区网站| 亚洲激情视频在线播放| 国产精品h在线观看| 国产欧美精品日韩| 国产99久久久欧美黑人| 亚洲一区中文字幕| 亚洲二区在线播放视频| 欧美裸体xxxxx| 亚洲性av在线| 欧美成人精品激情在线观看| 国产亚洲欧美视频| 亚洲一区二区三区视频| 精品动漫一区二区三区| 日韩欧美亚洲范冰冰与中字| 中文字幕一区二区精品| 久久综合88中文色鬼| 亚洲老头老太hd| 日韩av电影手机在线观看| 91精品国产乱码久久久久久蜜臀| 91在线色戒在线| 日韩在线欧美在线国产在线| 亚洲品质视频自拍网| 国产精品露脸av在线| 成人在线中文字幕| 日韩av在线一区| 亚洲а∨天堂久久精品喷水| 精品调教chinesegay| 亚洲综合视频1区| 韩剧1988在线观看免费完整版| 精品久久久久久久久久久| 欧美精品九九久久| 国产精品男女猛烈高潮激情| 欧美成人午夜影院| 亚洲日本aⅴ片在线观看香蕉| 亚洲精品久久久久| 久久久精品视频在线观看| 亚洲国产成人久久| 色婷婷av一区二区三区在线观看| 国产精品夜间视频香蕉| 欧美激情在线播放| 尤物tv国产一区| 亚洲韩国日本中文字幕| 91精品在线影院| 久久精品中文字幕免费mv| 91久久精品国产91久久| 国产日本欧美一区| 成人性生交大片免费看小说| 韩国三级电影久久久久久| 日韩激情在线视频| 国产精品国语对白| 丝袜情趣国产精品| 久久久精品免费| 欧美自拍视频在线| 亚洲精品国产精品自产a区红杏吧| 亚洲综合在线中文字幕| 国产成人啪精品视频免费网| 日韩av免费观影| 国内精品伊人久久| 欧美怡春院一区二区三区| 中文字幕在线日韩| 精品久久久久久久久久久久久久| 国产一区二区三区直播精品电影| 亚洲女同性videos| 尤物yw午夜国产精品视频明星| 亚洲一区二区三区在线免费观看| 国产成人精品免高潮费视频| 国产精品久久久久99| 久久久久国产精品免费| 欧美与黑人午夜性猛交久久久| 精品色蜜蜜精品视频在线观看| 精品久久久久久久久久| 欧美床上激情在线观看| 亚洲香蕉av在线一区二区三区| 欧美精品一区二区三区国产精品| 亚洲成人a级网| 亚洲一区二区三区777| 亚洲欧美国产精品久久久久久久| 国产精品自产拍在线观看中文| 亚洲美女av黄| 国产精品亚洲激情| 欧美精品少妇videofree| 欧美成人黑人xx视频免费观看| 国产精品日本精品| 欧美成年人在线观看| 88国产精品欧美一区二区三区| 夜夜躁日日躁狠狠久久88av| 国产精品com| 久久成人精品视频| 亚洲国产小视频| 亚洲人成绝费网站色www| 久久亚洲影音av资源网| 亚洲精品视频网上网址在线观看| 日韩av不卡电影| 久久久久中文字幕| 国产91精品青草社区| 一区二区三区四区精品| 国产第一区电影| 97婷婷大伊香蕉精品视频| 日韩美女写真福利在线观看| 97成人精品视频在线观看| 日韩精品在线观| 国产99久久久欧美黑人| 国产精品视频26uuu| 国产精品男人的天堂| 日韩免费电影在线观看| www.久久撸.com| 麻豆国产va免费精品高清在线| 久久影视电视剧免费网站清宫辞电视| 欧美在线视频一区二区| 国产中文字幕亚洲| 精品高清一区二区三区| 久久久精品国产一区二区| 日韩在线观看免费av| 国产精品大陆在线观看| 欧美做爰性生交视频| 国产精品com| 欧美在线一区二区三区四| 欧美超级免费视 在线| 欧美xxxx综合视频| 亚洲综合一区二区不卡| 精品欧美一区二区三区| 久久久久久噜噜噜久久久精品|