zoukankan      html  css  js  c++  java
  • iOS 中strong,weak,copy,assign区别

    1:ARC环境下,strong代替retain.weak代替assign
    2:weak的作用:在ARC环境下,,所有指向这个对象的weak指针都将被置为nil。这个T特性很有用,相信很多开发者都被指针指向已释放的对象所造成的EXC_BAD_ACCESS困扰过,使用ARC以后,不论是strong还是weak类型的指针,都不会再指向一个已经销毁的对象,从根本上解决了意外释放导致的crash。

     3:assign的作用:简单赋值,不改变引用计数,对基础数据类型 (例如NSInteger,CGFloat)和C数据类型(int, float, double, char, 等) 适用简单数据类型 
    4:copy的作用:建立一个索引计数为1 的对象,然后释放旧对象 
    5:strong的作用:在ARC环境下,只要某一对象被一个strong指针指向,该对象就不会被销毁。如果对象没有被任何strong指针指向,那么就会被销毁。在默认情况下,所有的实例变量和局部变量都是strong类型的。可以说strong类型的指针在行为上跟非ARC下得retain是比较相似的 

    6:retain的作用:在非ARC时代,你需要自己retain一个想要保持的对象,ARC环境下就不需要了。现在唯一要做的就是用一个指针指向这个对象,只要指针没有被重置为空,对象就会一直在堆上。当指针指向新值的时候,原来的对象就会被release一次。这对实例变量,sunthesize的变量或者是局部变量都是实用的。

    基本上:

        NSString类用copy,控件类用weak,,复杂数据类的用strong,数字类,比如INUIgter,nsinter,cgreck这些用assign

         特别说明一下,在xib/SB拖的控件,连接到代码建议使用weak。系统原生创建的也是(weak, nonatomic)。不要去更改了,知道为啥不?因为控件拖到xib/SB后,系统自动为其赋了strong,所以拖到代码就用weak就行了。不信你右键xib/SB ->在XML格式下查看就什么都明白了

         如果一个对象在某段时间中反复加载,而你又不希望每次加载都要重新alloc 的话,那就strong,strong 保证对此对象保持一个强引用,对于这个对象,只要有1个strong引用的话,那它就不会 释放,当然多个strong同时作用于它也不会释放。

    如果一个对象在某段时间只会加载一次,并且加载之后确定不再使用了,那就可以使用weak,这样当其他原因导致引用计数减1(比如 removefromsuperview)的时候,此对象就自动释放了。无需再在delloc 里面再release一次,但你要保证释放之后确实不再使用此对象,否则将导致错误

    其实strong和retain的作用有些像,只不过strong 和weak是在arc里面引入的,他俩算是一对儿, 对应关系有点类似 retain 和assign 

  • 相关阅读:
    转载--C 的回归
    学嵌入式不是你想的那么简单--转载
    scanf() 与 gets()--转载
    getchar、getch、getche 与 gets()
    scanf()函数原理
    C/C++头文件一览
    再论函数指针、函数指针数组
    初论函数指针、指针函数、指针的指针
    转载--一个“码农”自述的血泪史:当了35年程序员,我最大的遗憾就是没抓住机遇转行
    转载--协方差的意义和计算公式
  • 原文地址:https://www.cnblogs.com/iOS-mt/p/8989523.html
Copyright © 2011-2022 走看看