美文网首页
iOS 永不再错的assign,retain,copy的区别

iOS 永不再错的assign,retain,copy的区别

作者: 风鹰lm | 来源:发表于2017-04-18 15:57 被阅读0次

    本文是本人多次面试跟面试官交流加上自己使用经验的心得体会!适合初级中级iOS开发工程师。看一遍就能完全理解的assign,retain和copy的区别,看完这篇文章搞定一切iOS面试

       assign:assign在修饰属性的时候,主要用于基本数据类型,int,float等,与引用计数无关,所以没有引用计数的增加或减少,当然assign也可以用于修饰对象,但是当用来修饰对象的时候,若对象释放掉了,其指针不会置为nil,weak会!

       举个例子

        A *a=【【A alloc】init】;

        A *b=【a assign】;

    此时a和b指向的是堆中同一块内存地址,a和b在栈中的地址也是一样的,如果此时a不需要这个内存了直接释放掉,若b还在使用这块内存,就会crash!

        retain:retain会使引用计数增加1,假装A *a=【【A alloc】init】;此时若有b=【a retain】;则a,b同时指向一块内存地址,此时对象的引用计数增加到2,如果此时释放a,并不会造成程序的crash!此时ab所指向的堆中的内存地址相同,但是ab在栈中的地址不同

       copy:a和b各有自己的内存,a和b在栈中的地址不同,其所指向的堆中的内存地址也不相同!

    总结:assign是一块儿内存,一个指针指向这块内存

    retain是一块内存,两个不同的指针指向这个内存

    copy是两个不同的内存,各有一个不同的指针指向着!

    下面主题是深浅复制,有时间再写

    相关文章

      网友评论

          本文标题:iOS 永不再错的assign,retain,copy的区别

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