ios _开头命名规范

14 篇文章 0 订阅

在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











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值