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 _开头命名规范的主要内容,如果未能解决你的问题,请参考以下文章

python命名规范

Python命名规范

JAVA——各类命名规则和规范

MYSQL索引详解

变量命名规范

(转)详解PHP编码规范文档