NSMutableArray使用copy声明所产生内存泄漏的问题

NSMutableArray问题
上图是定义一个不可数对象mutableArray,使用copy来声明所使用的代码。

1
所报的错如上图,意为:在NSArray这样的类型中,找不到removeObject:方法。为什么会出现这样的错误呢?相反,如果使用strong来声明的话就不会出错。

综合上诉,通过思考会明显看出有两个问题:

1、为什么使用copy会报错,使用strong却不会。

2、为什么报错会报在NSArray中,无法找不到removeObject

根据这两个问题,我们就可以思考,修饰词copy和strong有什么区别呢?为什么copy后报错会是NSArray,无法找到removObject呢,是不是copy时生成了NSArray?所以解决这两个问题,我们就能知道为什么不能用copy这个关键字了
我们做iOS开发的大致都对这个了解,再科普一下这两个的关系和区别。

copy和strong的区别:copy赋值时会开辟一个新的内存区域,而 strong 则不会。使用 copy 可以防止不可变的属性被赋值的是可变的数据时,因可变数据的改变而改变属性的值

self.mutableArray = [[NSMutableArray alloc] initWithArray:@[@"1",@"2",@"3"]];

这句代码开辟内存空间赋值给self.mutableArray. 你用self.array = 是通过setter方法来给mutableArray赋值,而你又给这个setter方法设置copy(_mutableArray = [mutableArray copy]),而经过copy生成的mutableArray指针指向的是一个不可变数组,这时你在调用removeObject或add方法,肯定会出问题,并且会报出上面所出现的错误“unrecognized selector sent to instance”。所以我们应该知道为什么用copy会产生内存泄漏的问题,而strong却不会。

发布了30 篇原创文章 · 获赞 8 · 访问量 2万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章