美文网首页
NSArray 和 NSMutableArray 被strong

NSArray 和 NSMutableArray 被strong

作者: 男儿心 | 来源:发表于2018-11-29 17:55 被阅读11次

    1、NSArray 被copy 、strong修饰后的变化:

    (1)strong:被strong修饰之后,由于只是强引用,所以修饰后的对象数组和源对象数组只是指向同一个内存区域,这样就会造成修饰后的对象数组会随着源对象数组的改变而改变,即便有时候你并不想让修饰后的对象跟着改变。

    (2)copy:被copy修饰之后,源对象数组被copy了一份,源对象数组和修饰后的对象数组是不同的,所以修饰后的对象数组并不会随着源对象数组改变。

    由打印结果可知,被strong修饰的array 随着mutableArray的变化而变化,而被copy修饰的array并没有变化。

    使用strong,则arrayStrong与可变数组mutableArray指向同一块内存区域,mutableArray内容改变,导致arrayStrong的内容改变,因为两者是同一个东西;而使用copy,arrayCopy在赋值之前,将mutableArray内容复制,创建一个新的内存区域,所以两者不是一回事,mutableArray的改变不会导致arrayCopy的改变。

    综上所述:

    当修饰可变类型的属性时,如NSMutableArray、NSMutableDictionary、NSMutableString,用strong。

    当修饰不可变类型的属性时,如NSArray、NSDictionary、NSString,用copy。

    2、NSMutableArray 被copy 、strong修饰后的变化:

          把NSMutableArray用copy修饰有时候就会crash,因为对这个数组进行了增删改操作,而copy后的数组        变成了不可变数组NSArray,没有响应的增删改方法,所以对其进行增删改操作就会报错。

         如果是strong,直接是赋值;右边是什么,左边就是什么,并且是强引用新值,左边的类型会与右                 边的相同,不会改变。

    相关文章

      网友评论

          本文标题:NSArray 和 NSMutableArray 被strong

          本文链接:https://www.haomeiwen.com/subject/qtwfcqtx.html