• self和下划线的用法区别


    在最新的xcode中,已经不需要我们自己去写 set,get 方法,在我们使用@property声明属性时,系统已经自动帮我们生成set,get方法。
    同时我们发现在我们访问我们声明的变量时,会有self. 和 以"_"开头的访问方式,那么这两种方式到底有什么样的区别呢?

    我们来一起看一下:

    @property (retain, nonatomic) NSMutableArray *nameArray;
    self.nameArray是访问属性的,而_nameArray是访问实例变量的.
    

    属性是实例变量加上GET,SET方法的一个整合体,他主要是承担一个外部访问的一个接口!

    实例变量只能在本类中才可以访问,外部不可以访问!

    总的原则:

    在类内部访问变量的时候用“_”;

    在类外部也就是其他类里访问这个类的变量时用“.” 语法;

    注意事项:

    手动管理内存的情况下:

    使用“.”语法来初始化变量的时候,会产生内存泄漏的问题:

    self.nameArray = [NSMutaleArray alloc] init];
    

    上述代码,造成的问题是,在self.nameArray的时候相当于调用了set方法,引用计数+1,后面alloc的时候,引用计数再次+1。
    在我们最后dealloc中release的时候,引用计数只减了一次,并没有完成全部释放,这样就造成了内存泄漏的问题。

    解决方法:就是用“_”来初始化以及访问变量,这样就不会产生内存问题,虽不是什么高明的办法,但的确有效。

    _nameArray = [NSMutaleArray alloc] init];
    

    上述便是“.”和“_”在使用的时候的简单区别。

    如果是在ARC(自动管理内存)的情况下虽然不存在上述问题,但从编码规范来考虑,还是注意点儿的好。

  • 相关阅读:
    recorder.js 基于H5录音功能
    input type=file 怎么样调取用户手机照相机
    js replace(a,b)之替换字符串中所有指定字符的方法
    XYIXY.COM短网址在线生成,快速、稳定、永久有效,免费开放网址缩短API接口。
    NAVICAT FOR MYSQL破解版安装
    HTML之marquee(文字滚动)详解
    奇异值分解(SVD) --- 几何意义
    矩阵奇异值分解(SVD)及其应用
    行人检测(Pedestrian Detection)资源
    基金项目的英文
  • 原文地址:https://www.cnblogs.com/liukunpeng/p/3738202.html
Copyright © 2020-2023  润新知