几个有用的Objective-C新特性

Objective-C已经稳定在TIOBE编程语言排行榜前五名,2010年刚接触Objective-C还是因为公司在搞Mac版企业IM开发,那时候OC还几乎无人问津,这些年倒是风光无限,只能感叹当初踩对点了,不清楚未来10年又会有哪些语言流行起来,下一个会不会是go?。这几年来Objective-C的进化速度也是非常快,Apple不断添加新的特性到Objective-C,例如ARC、Block等,以下挑些个人感觉对开发效率影响比较大的新特性来说:

不用再写sythesize

以前声明属性Property,都要在类的实现@implementation里将属性和成员变量做相应的synthesize,synthesize的含义是将属性和成员变量做关联。早期声明一个属性,需要同样声明一个成员变量,然后@synthersize date=_date;将属性与成员变量关联起来,后来可以无需声明成员变量,@synthersize date=_date;可以自动帮你声明一个名字为_date的成员变量,@synthersize date就是自动声明一个成员变量date。

Xcode4.4以后,synthesize关键字也不需要写了,例如@property (nonatomic, readwrite, retain) NSDate *date;编译器可以自动绑定并且生成对应的成员变量NSDate *_date,相当于是自动添加了@synthesize date=_date;。这样既不用再声明成员变量,也不要费神写@synthesize,方便不少。

当然凡事有例外,如果同时实现了setter和getter方法,例如上面你实现了-(void)setDate-(NSDate *)date,那么编译器就不会自动帮你synthesize。这里同时实现setter和getter方法是针对readwrite属性来说的,对于readonly属性,那么你实现了getter方法即-(NSDate *)date也同样不会自动绑定成员变量。

成员方法的顺序

以前在.m实现文件中实现方法时经常会引用其他成员方法,而如果引用的成员方法未在头文件或者匿名catrgory中声明,同时也不在引用者前面,那么编译器会报未找到该方法的错误。现在新的编译器中,只要在实现文件里的成员方法,在其他任何位置的方法中调用都不再报错,Nice!

不一样的NSNumber、NSArray和NSDictionary

最新的OC语法里还添加了许多类似脚本语言的特性,例如以前要生成NSNumber满费劲,都是[NSNumber numberWith***]的写法,太多冗余。现在方便了,可以用@符号替代,例如[NSNumber numberWithChar:‘c’]可以直接表示为@'c'[NSNumber numberWithInt:123]直接表示为@123[NSNumber numberWithFloat:1.23f]z直接写为@1.23f,其他类型同理变换。

NSArray的变化也是类似的,[NSArray array]就是@[][NSArray arrayWithObject:x]就是 @[x][NSArray arrayWithObjects:x, y, z, nil]就是@[x, y, z],不过这种方式生成的是NSArray,要生成NSMutableArray呢?也简单,直接调用mutableCopy即可,例如[@[x, y, z] mutableCopy]。如果要访问第1个元素,以前需要写成[array objectAtIndex:0],现在可以直接用array[0]访问,像极了脚本语言。

NSDictionary的变化和NSArray类似,不同的是用@{},例如[NSDictionary dictionaryWithObject:value forKey:key]可以表示为@{key: value}。访问时也和大多数脚本语言一样,用dict[key]来获得键值对应的值。

至于以上简化的方法到底要不要用,还是看自己或者项目组的习惯了,个人建议是在符合统一编码规范的情况下,尽量拥抱变化,毕竟这些都是为了优化生产效率的变化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值