久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

!!OC中copy的使用

 quasiceo 2015-04-20

OC中copy的使用

發(fā)表于11個月前(2014-05-19 23:50)   閱讀(831) | 評論(0 1人收藏此文章, 我要收藏
0

慕課網(wǎng),,程序員升職加薪神器,點擊免費學(xué)習(xí)

摘要 在Objective-C中,一個對象可以調(diào)用copy或mutableCopy方法來創(chuàng)建一個副本對象,本文著重講解如何正確使用copy的功能.

    首先,,什么是copy,?

    Copy的字面意思是“復(fù)制”、“拷貝”,,是一個產(chǎn)生副本的過程,。

    常見的復(fù)制有:文件復(fù)制,作用是利用一個源文件產(chǎn)生一個副本文件,。

    特點:1,、修改源文件的內(nèi)容,不會影響副本文件,;

             2,、修改副本文件的內(nèi)容,不會影響源文件,。

    OC中copy的作用是:利用一個源對象產(chǎn)生一個副本對象

    特點:1,、修改源對象的屬性和行為,不會影響副本對象,;

             2,、修改副本對象的屬性和行為,不會影響源對象,。

    如何使用copy功能,?

    一個對象可以調(diào)用copy或mutableCopy方法來創(chuàng)建一個副本對象。

    1,、copy:創(chuàng)建的時不可變副本(如NSString,、NSArrayNSDictionary),。

    2,、mutableCopy:創(chuàng)建的可變副本(如NSMutableStringNSMutableArray,、NSMutableDictionary),。

    使用copy功能的前提:

    1、copy:需要遵守NSCopying協(xié)議,,實現(xiàn)copyWithZone:方法,。

    @protocol NSCopying

   - (id)copyWithZone:(NSZone *)zone;

      @end

      2,、mutableCopy : 需要遵守NSMutableCopying協(xié)議,實現(xiàn)mutableCopyWithZone:方法

      @protocol NSMutableCopying

      - (id)mutableCopyWithZone:(NSZone *)zone;

      @end 

      深復(fù)制和淺復(fù)制的區(qū)別:

      深復(fù)制(深拷貝,、內(nèi)容拷貝,、deep copy):

      特點:1、源對象和副本對象是不同的兩個對象,;

               2,、源對象引用計數(shù)器不變,副本對象計數(shù)器為1(因為是新產(chǎn)生的),。

      本質(zhì):產(chǎn)生了新對象,。

      淺復(fù)制(淺拷貝、指針拷貝,、shallow copy):

      特點:1,、源對象和副本對象是同一對象;

               2,、源對象(副本對象)引用計數(shù)器+1,,相當于做一次retain操作。

      本質(zhì):沒有產(chǎn)生新對象,。

      常見的復(fù)制如下圖:    

    

      只有源對象和副本對象都不可變時,才是淺復(fù)制,,其他都是深復(fù)制,。

      關(guān)于區(qū)分深復(fù)制與淺復(fù)制的一些詳細代碼如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
/**
 NSMutableString調(diào)用mutableCopy : 深復(fù)制
 */
void mutableStringMutableCopy()
{
    NSMutableString *srcStr = [NSMutableString stringWithFormat:@"age is %d", 10];
    NSMutableString *copyStr = [srcStr mutableCopy];
     
    [copyStr appendString:@"abc"];
     
    NSLog(@"srcStr=%@, copyStr=%@", srcStr, copyStr);
}
/**
 NSMutableString調(diào)用copy : 深復(fù)制
 */
void mutableStringCopy()
{
    NSMutableString *srcStr = [NSMutableString stringWithFormat:@"age is %d", 10];
     
    NSString *copyStr = [srcStr copy];
     
     
    [srcStr appendString:@"abc"];
     
    NSLog(@"srcStr=%p, copyStr=%p", srcStr, copyStr);
}
/**
 NSString調(diào)用mutableCopy : 深復(fù)制
 */
void stringMutableCopy()
{
    NSString *srcStr = [NSString stringWithFormat:@"age is %d", 10];
     
    NSMutableString *copyStr =  [srcStr mutableCopy];
    [copyStr appendString:@"abc"];
     
    NSLog(@"srcStr=%@, copyStr=%@", srcStr, copyStr);
}
/**
 NSString調(diào)用copy : 淺復(fù)制
 */
void stringCopy()
{
    //  copy : 產(chǎn)生的肯定是不可變副本
     
    //  如果是不可變對象調(diào)用copy方法產(chǎn)出不可變副本,那么不會產(chǎn)生新的對象
    NSString *srcStr = [NSString stringWithFormat:@"age is %d", 10];
    NSString *copyStr = [srcStr copy];
     
    NSLog(@"%p %p", srcStr, copyStr);
}

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

      1.ARC

      1> copy : 只用于NSString\block,;

      2> retain : NSString\block以外的OC對象,;

   3> assign : 基本數(shù)據(jù)類型、枚舉,、結(jié)構(gòu)體(非OC對象),,當2個對象相互引用,一端用retain,,一端                     用assign,。

 

      2.ARC

      1> copy : 只用于NSString\block;

      2> strong : NSString\block以外的OC對象,;

      3> weak : 2個對象相互引用,,一端用strong,一端用weak,;

   4> assgin : 基本數(shù)據(jù)類型,、枚舉、結(jié)構(gòu)體(非OC對象),。


    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多