zoukankan      html  css  js  c++  java
  • iOS中self.xxx 和 _xxx 下划线的区别

    property (nonatomic,copy) NSString *propertyName; self.propertyName 是对属性的拜访; _propertyName 是对部分变量的拜访。 其1、@property的声明中,编译器正在天生g] 


    @property (nonatomic,copy) NSString *propertyName;

    self.propertyName 是对属性的访问;

    _propertyName 是对局部变量的访问。

    其一、@property的声明中,编译器在生成getter,setter方法时是有优先级的,它首先查找当前的类中用户是否已定义属性的getter,setter方法,如果有,则编译器会跳过,不会再生成,使用用户定义的方法。 

    也就是说你在使用self.propertyName 时是在调用一个getter方法。

    self.propertyName 会让计数器+1;

    其二、_propertyName,是直接调用变量,不通过getter方法。  

    _propertyName是类似于self->_propertyName。

    用self.propertyName 是更好的选择,因为这样可以兼容懒加载,同时也避免了使用下划线的时候忽视了self这个指针,后者容易在block中造成循环引用。

    同时,使用 _是获取不到父类的属性,因为它只是对局部变量的访问。

    最后总结:self方法实际上是用了get和set方法间接调用,下划线方法是直接对变量操作。

  • 相关阅读:
    2020 camp day0 -F
    2020 camp day2 -k
    扫描线 hdu1542
    Assign the task HDU
    快速排序模板
    Java中Thread的常用方法
    Java中多线程的创建
    二分模板
    main()的简单理解
    单例模式饿汉式和懒汉式的实现
  • 原文地址:https://www.cnblogs.com/lihaibo-Leao/p/5539622.html
Copyright © 2011-2022 走看看