OC - self


关于 self

self 可以用在类方法,也可以用在实例方法
self 指的是当前执行的对象,而不一定是self 所在的这个类文件。

比如逆向中,方法被混淆了,那么self 指的是调用方法的那个对象。


self 和 下划线

通过self.xxx 访问属性的方法,包含了set和get方法。
而通过下划线是获取自己的实例变量,不包含set和get的方法。

例如:

@property (nonatomic,copy) NSString *propertyName;

self.propertyName 是对属性的访问;
_propertyName 是对局部变量的访问。

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

1、使用self.propertyName 时,是都在调用一个 getter方法。self.propertyName 会让计数器+1;


而_propertyName,是直接调用变量,不通过 getter 方法, 类似于 self->_propertyName。


2、self.xxx 可以兼容懒加载,同时也避免了使用下滑线的时候,忽略了self 这个指针,后者容易在 bLock 中造成循环引用。

3、使用下划线获取不到父类的属性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值