ios - OC中使用【self.xxx】和【_xxx】有什么区别吗?
伊谢尔伦
伊谢尔伦 2017-04-17 17:10:45
0
7
209

看别人源码,风格有些不一样。

比如在@interface中声明的xxx这个成员变量。
@implementation的方法中使用。
从原理上来说,self.xxx和直接使用下划线的_xxx,到底有区别吗?

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

모든 응답(7)
伊谢尔伦

用@property关键字来声明的属性,在编译期会默认生成一个下划线加名称的属性变量,并且自动在implemention文件中生成setter和getter方法。

使用_yourName的方式是直接引用变量,而通过点语法调用self.yourName这种形式,实际是调用setter或getter方法!

经常会有些需要来重写属性的getter和setter方法,此时就需要使用点语法。

这并不是风格问题,而且逻辑问题!同时在当前Class的初始化方法和dealloc方法中最好不使用点语法调用实例属性,会有意想不到的问题

迷茫

self.xxx 实际上是 调用了 getter 方法
而 _xxx 则类似于 直接赋值

Ty80

这是一个历史遗留的传统,以前必须先声明一个类成员变量,后来推出了点语法,就必须实现setter和getter方法,后来出现了@property自动生成setter和getter的声明,@synthesize生成setter和getter的具体内容,再后来做了简化,直接一个@property帮你全搞定了

Ty80

使用self.是对属性的访问。使用_是对局部变量的访问。当我们使用self.XXX的时候是在调用了这个属性的getter方法,无论是系统帮你写的还是你自己重写的,在getter方法中判断局部变量是否为空,如果为空,创建实例,并返回。也就是说我们在使用self.时能保证它有实例,不为空。

PHPzhong

都在说是set和get方法的区别。那我说说这有啥区别。
比如人是一个类,有个年龄属性age ,我们定义为int型。那么问题来了,给这个人的年龄设置为负10行么?当然不可以。所以我们把age设置为private属性,对调用它的类不可见,然后提供两个接口,set,get, set时候加上参数判断,这样起到了保护作用。

Peter_Zhu

知道什么是懒加载吗?懒加载可以通过重写get方法实现。索引self.和_还是有区别的

Peter_Zhu

一个是调getter方法获得
一个是直接访问地址获得

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!