zoukankan      html  css  js  c++  java
  • 关于NSArray使用时用strong修饰还是copy修饰问题测试

    大家都知道,使用NSMutableArray时是用strong修饰,例如:

     

    1. @property (nonatomic,strong) NSMutableArray * mutableArray;  



    但是,NSArray呢?我看大多数人都直接使用strong,而且网上还有很多人说除了NSString用copy,其他对象类型都用strong。

    那么,问题来了:当用strong修饰NSArray的时候,如果遇到用可变数组给它赋值怎么办?会导致意料之外的bug,看下面代码:

    1. //-------声明两个属性  
    2.   
    3. @property (nonatomic,strong) NSMutableArray * mutableArray;  
    4.   
    5. @property (nonatomic,strong) NSArray * array;  



    1. //------执行如下代码  
    2.   
    3.     self.mutableArray = [NSMutableArrayarray];  
    4.   
    5.     [self.mutableArrayaddObject:@"1"];  
    6.   
    7.       
    8.   
    9.     self.array = [NSArrayarray];  
    10.   
    11.     self.array =self.mutableArray;  
    12.   
    13.     NSLog(@"array---%@",self.array);  
    14.   
    15.       
    16.   
    17.     [self.mutableArrayaddObject:@"2"];  
    18.   
    19.     NSLog(@"array---%@",self.array);  



    //------运行结果

    array---(

        1

    )

    array---(

        1,

        2

    )

    也就是说,self.array在没有被直接操作的情况下,跟着self.mutableArray 变化了,这是很危险的。


    如果,把array用copy修饰,也就是

    @property (nonatomiccopyNSArray * array;

    运行结果会如下:

    array---(

        1

    )

     array---(

        1

    )

    这次self.array不会跟随self.mutableArray 变化了。


    综上:在可能遇到可变数组给不可变数组直接赋值的情况下,使用copy修饰不可变数组。

    我一直使用copy修饰不可变数组,目前还未出现过问题。

    关于强弱指针的知识,建议大家参考:点击打开链接

  • 相关阅读:
    Ionic Cordova 环境配置window
    滚动条超出表格标题,表格标题固定
    逗号分隔查询
    sulin LuceneNet 搜索二
    LuceneNet 搜索一
    Sql 竖表转横表
    div 无缝滚动
    【bfs】【中等难度】wikioi3055 青铜莲花池
    【bfs】【中等难度】tyvj P1234
    【简单思考】noip模拟赛 NTR酋长
  • 原文地址:https://www.cnblogs.com/pioneerMax/p/6698348.html
Copyright © 2011-2022 走看看