了解iOS 6开发第一篇:新的Objective-C语法

写在前面:由于iOS Developer Program的NDA的限制,这系列文章会等到iOS 6正式发布时,再push到github上。因此你看到的这些文章,很可能是我两、三个月前学习iOS 6的时候写下的,难免会有不准确的地方,但我持续修改。如果你发现了问题,请在文章下面留言或者发邮件给我。另外我没有看中文文档的习惯,所以翻译术语真的很困难,如果你知道怎么翻译更好,也请告诉我。

iOS 6是激动人心的,也带来了一些比较大的改变。最近在看WWDC 2012 Video Session,这一系列的文章,是我在学习iOS 6的一些新特性的时候写的一些笔记,也希望对其它中国开发者有帮助。

WWDC 2012,介绍了新的Objective-C的语法。这些语法依赖于LLVM 4.0编译器,由Xcode 4.4/4.5提供。主要有三点变化:

  • Objective-C Literals & Boxing Expressions (Objective-C字面量 & 表达式装箱)
  • Collection Subscription (集合下标)
  • Automatic Property Synthesis (自动属性综合,Synthesis怎么翻译?)

Objective-C Literals & Boxing Expressions

LLVM 4.0之前:

1
2
3
4
[NSNumber numberWithInt:42]
[NSNumber numberWithDouble:10.8]
[NSNumber numberWithBool:YES]
[NSNumber numberWithInt:6 + x * 2012]

LLVM 4.0之后:

1
2
3
4
@42
@10.8
@YES
@(6 + x * 2012) //表达式要用(),这就是Boxing Expressions

Collection Subscription

LLVM 4.0之前:

1
2
3
4
[NSArray arrayWithObjects:a, b, c, nil]
[array objectAtIndex:i]
[NSDictionary dictionaryWithObjectsAndKeys:v1, k1, v2, k2, nil]
[dictionary valueForKey:k]

LLVM 4.0之后:

1
2
3
4
@[a,b,c] //这里没有nil
array[i]
@{k1: v1, k2: v2} //这里没有nil
dictionary[k]

Automatic Property Synthesis

LLVM 4.0之前:

1
@synthesize property;

LLVM 4.0之后:不需要使用@synthesize directive了

如何将代码转换为Modern Objective-C

Xcode 4.4+,Edit->Refactor->Convert to Modern Objective-C Syntax

少写了很多代码,可读性也提高了很多(我被nil哨兵坑了好多次- -!)。Less code, less bug.

参考资料:

附小广告一则:唱吧iOS团队诚招iOS工程师,推荐成功即奖励6000元现金或iPhone 6一部,详见这篇blog