美文网首页iOS面试题整理iOS基本问题牛叉的demo
NSMutableArray使用copy声明所产生内存泄漏的问题

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

作者: RM_乾笙 | 来源:发表于2017-06-30 11:14 被阅读33次
    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却不会。

    相关文章

      网友评论

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

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