美文网首页
iOS中的assign和weak不同

iOS中的assign和weak不同

作者: 文艺女青年的男人 | 来源:发表于2018-01-10 19:50 被阅读0次

    共同点:

    都是弱引用类型

    区别:

    1.assign是在arc和mrc中同时存在的,而weak是在arc出现的时候才开始出现的

    2.assign:当属性所指向的对象消失的时候变量不会自动赋值为nil,但是当用weak修饰的变量可能会自动赋值为nil

    上代码:

    代码图

    生成用assign、weak、strong修饰的三个变量:assig、wea、str;

    将self.str赋值给self.wea和self.assig,然后释放self.str,那么相应的self.wea指向的在堆中的对象就会释放,self.wea也会将值设置为nil

    而self.assig中的引用虽然释放了,但是值却还是原来self.str中的值,所以当我们引用的时候就会造成野指针

    涉及到delegate:

    不管是在非ARC还是ARC,使用assign时,由于delegate值不会自动置nil,所以都需要注意释放:

    delegate方法

    需要在dealloc中去释放

    释放delegate

    所以当我们用weak修饰delegate,那么delegate被释放时,delegate就会自动置nil,所以就省去了dealloc的过程

    小伙伴们可以尝试尝试了……^_^

    相关文章

      网友评论

          本文标题:iOS中的assign和weak不同

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