objective-c 变量前加下划线"_"是什么意思?作者:王涛
链接:http://www.zhihu.com/question/26605346/answer/33392620
来源:知乎
这是苹果的编程规范(也说不上规范,就是算是习惯吧),声明的property如果没有特意指定synthesize的话,那么Objective-C就会自动的给你声明一个_开头的实例变量。
例如声明了一个叫param的property
@property (nonatomic, copy)NSString *param;
通过_param进行存取的话是不会调用该变量的setter或者getter方法的,声明的copy也就不会起作用,而通过self.param调用的话是会调用setter或者getter方法的,这样copy也就会起作用。
这样是通过自动的方式给你生成了一个_开头的变量,你当然可以不这样用,例如你在上面声明完property后,你可以在实现文件中再这么写
@synthesize param = param;
这样就没有了_param,取而代之的就是param,他们是一样的。
所以这仅仅就是一个编程习惯的问题,最早之前这个@synthesize是需要我们自己去写的,所以根据个人习惯就会有不带_的实例变量,而后来苹果把@synthesize自动完成了,不需要我们去写了,而起使用的是苹果那边的编程习惯,故而就是_开头了。