使用NSArray时,到底用strong修饰还是copy修饰

    xiaoxiao2022-06-30  83

    iOS开发人员都知道,使用NSMutableArray时是用strong修饰,例如:

    [objc]  view plain  copy @property (nonatomic,strongNSMutableArray * mutableArray;  

    那么,NSArray呢?好像很多人都直接使用strong,而且网上还有很多人说除了NSString用copy,其他对象类型都用strong。

    问题来了:当用strong修饰NSArray的时候,如果遇到用可变数组给它赋值怎么办?会导致不易察觉的问题,看下面代码:

    [objc]  view plain  copy //-------声明两个属性      @property (nonatomic,strongNSMutableArray * mutableArray;      @property (nonatomic,strongNSArray * array;  

    [objc]  view plain  copy //------执行如下代码          self.mutableArray = [NSMutableArrayarray];          [self.mutableArrayaddObject:@"1"];                    self.array = [NSArrayarray];          self.array =self.mutableArray;          NSLog(@"array---%@",self.array);                    [self.mutableArrayaddObject:@"2"];          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修饰不可变数组,目前还未出现过问题。

    转载请注明原文地址: https://ju.6miu.com/read-1126211.html

    最新回复(0)