ios _开头命名规范
Posted WoodBear009
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ios _开头命名规范相关的知识,希望对你有一定的参考价值。
在ios代码里,经常会看见以这种格式:_变量名 去命名一个变量,为什么? 其实这又是个基础概念知识,但发现实际上好多人好像却并不明了其中原由,只是看别人都这么写,也就这么写了,下面我就简单说一下这么做的原因。
刚接触ios开发时,我写的代码一般是这样的
@interface Person : NSObject
@property (nonatomic,copy) NSString *name;
@end
@implementation Person
@synthesize name;
-(void)talkMyName
NSString *myName = [NSString stringWithFormat:@"my name is %@",name];
NSLog(@"%@",myName);
@end
但你看很多书上或是别人代码可能是这样写的
@interface Person : NSObject
@property (nonatomic,copy) NSString *name;
@end
@implementation Person
@synthesize name = _name;//设置别名_name
-(void)talkMyName
NSString *myName = [NSString stringWithFormat:@"my name is %@",_name];
NSLog(@"%@",myName);
@end
区别主要在这一句
@synthesize name = _name;//设置别名_name
当时其实真的很不理解,不明白为什么要写这么一句,给name起一个别名_name,感觉好多余啊。但实际上,这种命名方式(_name)是苹果官方所推荐的,所以加上这么一句,以遵循苹果推荐的命名规则。而这种规则的好处是什么呢?
举一个例子,假如遇到下面这种情况
-(void)setMyName:(NSString *)name
?????
假如我的成员变量就用name,我该怎么写?
name = name? 显然不行
self.name = name ? 可此处假如我不想加self.呢?(加不加self.的区别,也是一个基础概念,这里不做说明)
那我只能改函数名为
-(void)setMyName:(NSString *)getName
name = getName;
好了,终于区分出成员变量和参数变量了
但如果我设置了_name别名,问题迎刃而解
-(void)setMyName:(NSString *)name
_name = name;
对,其实以_开头的目的就是简单的让编译器和开发者方便、明确的区分出成员变量和其他变量,就这么简单
后来,苹果为了推广这种命名规范,现在你的代码可以这样写了
@interface Person : NSObject
@property (nonatomic,copy) NSString *name;
@end
@implementation Person
-(void)talkMyName
NSString *myName = [NSString stringWithFormat:@"my name is %@",_name];
NSLog(@"%@",myName);
@end
不需要写@synthesize语句了,编译器自动就为带@property的成员变量分配好了别名(_变量名),直接用就好了。但不带@property的成员变量,就需要你自己按照规则去命名了(当然,你也可以继续一意孤行的不以_开头)
所以,现在的代码你最好都写成这样
@interface Person : NSObject
int _age;
NSString *_address;
@property (nonatomic,copy) NSString *name;
@end
自觉以_开头去命名成员变量
官方代码规范地址:
https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CodingGuidelines/CodingGuidelines.html#//apple_ref/doc/uid/10000146-SW1
以上是关于ios _开头命名规范的主要内容,如果未能解决你的问题,请参考以下文章