真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

OC中的copy-創(chuàng)新互聯(lián)

copy的概念OC中的copy
1     Copy的字面意思是"復(fù)制"、"拷貝",是一個產(chǎn)生副本的過程
2     對象拷貝的目的:要使用某個對象的數(shù)據(jù),但是在修改對象的時候不影響原來的對象內(nèi)容,常見的復(fù)制有用一個源文件產(chǎn)生:文件復(fù)制
3 作用:復(fù)制一個副本文件

特點:

成都創(chuàng)新互聯(lián)公司主要從事成都網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)漣源,十載網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):028-86922220
1 修改源文件的內(nèi)容,不會影響副本文件
2 修改副本文件的內(nèi)容,不會影響源文件
3 OC中的copy,就是指的對象的拷貝
4 作用:利用一個源對象產(chǎn)生一個副本對象
5 
6 修改源對象的屬性和行為,不會影響副本對象
7 修改副本對象的屬性和行為,不會影響源對象

如何使用copy功能

1 一個對象可以調(diào)用copy或mutableCopy方法來創(chuàng)建一個副本對象
2 copy:創(chuàng)建是不可變副本(如NSString、NSArray、NSDictionary)
3 mutableCopy:創(chuàng)建的是可變副本(如NSMutableString 、NSMutableArray、NSMutableDictionary)

使用copy功能的前提

1 copy:需要遵守NSCopying 協(xié)議,實現(xiàn)copyWithZone:方法
2 @protocol NSCopying
3 -(id)copyWithZone:(NSZone *)zone;
4 @end5 
6 nutableCopy:需要遵守NSMutableCopying協(xié)議,實現(xiàn)mutableCopeWithZone:方法
7 @protocol NSMutableCopying
8 -(id)mutableCopyWithZone:(NSZone *)zone;
9 @end

copy快速入門

1     以NSString字符串為例,進行copy 和 mutableCopy演示
2     copy 就是淺復(fù)制,因為沒有產(chǎn)生新的對象(有沒有產(chǎn)生新的對象也是判斷深淺復(fù)制的標(biāo)準(zhǔn))此處的copy后產(chǎn)生還是不可變的字符串
3     mutableCopy 就是深復(fù)制,會產(chǎn)生新的對象,這種copy就是淺復(fù)制(淺拷貝)
4 
5

copy的內(nèi)存管理

1 深復(fù)制(深拷貝,內(nèi)容拷貝,deep copy)
2 源對象和副本對象是不同的兩個對象
3 源對象引用計數(shù)器不變,副本對象計數(shù)器為1(因為是新產(chǎn)生的)
4 本質(zhì)是:產(chǎn)生了新的對象
5 
6 淺復(fù)制(淺拷貝,指針拷貝,shallow copy)
7 源對象和副本對象是同一個對象
8 源對象(副本對象)引用計數(shù)器+1,相當(dāng)于做一次retain操作
9 本質(zhì)是:沒有產(chǎn)生新的對象

@property中的copy關(guān)鍵字

1 @property(nonatomic,copy) NSString *name;

@property內(nèi)存管理策略選擇

 1 @property內(nèi)存管理策略的選擇
 2 1.非ARC
 3     copy:只用于NSString/block
 4     retain: 除NSString/block以外的OC對象
 5     assing:基本數(shù)據(jù)類型、枚舉、結(jié)構(gòu)體(非OC對象),當(dāng)兩個對象相互引用,一端用retain,一端用assign
 6 
 7 2.ARC
 8     copy:只用于NSString/block
 9     strong:除NSString/block以外的OC對象
10     weak:當(dāng)2個對象相互引用,一端用strong,一端用weak
11     assgin:基本數(shù)據(jù)類型、枚舉、結(jié)構(gòu)體(非OC對象)

為自定義的類實現(xiàn)copy操作

 1 自定義對象copy步驟
 2     新建Person類
 3     為Person類實現(xiàn)copy操作
 4 1.讓Person類遵守NSCopying協(xié)議
 5 2.實現(xiàn)copyWithZone:方法,在該方法中返回一個對象的副本即可
 6 3.在copyWithZone方法中,創(chuàng)建一個新的對象,并設(shè)置該對象的數(shù)據(jù)與現(xiàn)有對象一致,并返回該對象
 7     創(chuàng)建Person對象,調(diào)用copy方法,查看地址.測試拷貝代碼,見備注
 8 
 9 細節(jié)介紹:
10   1.調(diào)用copy其實就是調(diào)用copyWithZone方法,所以要實現(xiàn)copyWithZone方法(查看NSObject協(xié)議中的copy方法的介紹)
11   2.copyWithZone方法返回值類型是id類型,需要返回一個對象的副本
12   3.關(guān)于copyWithZone的參數(shù)zone問題:
13             zone:表示空間,分配對象是需要內(nèi)存空間的,如果制定了zone,就可以指定新建對象對應(yīng)的內(nèi)存空間,但是:zone是一個非常古老的技術(shù),為了避免在堆中出現(xiàn)內(nèi)存碎片而使用的,在今天的開發(fā)中,zone幾乎可以忽略
14             查看NSObject協(xié)議中的allocWithZone:方法介紹(zone參數(shù)可以被忽略,是歷史原因)
15   4.如果對象沒有 可變/不可變 的區(qū)別,只要實現(xiàn)copyWithZone方法即可
16   5.copyWithZone:方法的具體實現(xiàn)
17         -(id) copyWithZone:(NSZone *)zone{
18 //copy 是要建立一個新的副本,和當(dāng)前的對象具有相同的內(nèi)容19         }    
20 //1.實例化person對象21         Person *p =[[Person alloc]init];
22         p.name =self.name;
23         p.age =self.age;
24 return p;

網(wǎng)站題目:OC中的copy-創(chuàng)新互聯(lián)
文章URL:http://weahome.cn/article/coodpo.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部