`
miss大为
  • 浏览: 80643 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Objective-C新特性

阅读更多

基于Xcode4.4(不完全独有)。

1. 成员方法无需前置声明
之前,我们调用一个定义在后面(未声明)的成员方法,比如[self callSomeMethod],会得到警告说没有找到该函数。
通常,这种情况下,为了消除这个警告,我们会很郁闷地(为了代码整洁)跑到前面声明下,使用旧版本Xcode往往还要临时写一个匿名扩展(新版本Xcode自动生成);或者(无所谓地)直接把后面的函数定义放到前面。
现在,编译器会先扫描@implementation内的方法,如果存在函数定义,则不出现该警告。
让程序员心情更好,提高生产力有木有!

2. 枚举类型改进
这点对我这种开发者意义不大,不过也更清晰了。
我个人习惯用如下风格定义枚举类型:

清晰地知道起始值和边界值,方便做安全检查。
不过我不清楚枚举值的边界能有多大,当然,一般开发活动中不会有什么问题。
现在,我们可以清楚地知道枚举值的范围,且跨平台:

1
2
3
4
5
6
typedef enum _someEnumType : NSUInteger {
    kOriginalType = 0,
    kYellowType,
    kRedType,
    kTotalTypeCount
} SomeEnumType;

如果没有听错的话,这个特性是从C++ 11引进的。

3. 自动合成属性
在之前的Xcode版本,我们在.h文件里声明属性@property后,还需要在.m文件中合成@synthesize,很是麻烦。
现在,我们只需要声明@property name即可,Xcode会自动合成@synthesize name = _name。
这完全符合基本编码风格!所以不需要管其它细节了,照常使用就行。

4. 新增语法特性
通过神奇的@符号,直接简化语法,变身脚本语言!LOL
以前字符串可以这么写:NSString *str = @"Hello";。
现在NSNumber这么写:
1
2
3
4
    NSNumber *number = @'H';
    number = @1.2;
    number = @YES;
    number = @(60 * 60 * 24);

最后一句是表达式封装特性,@( expression ),比如NSString *name = @([self getMyName]);。

数组可以这么写:
1
2
3
NSArray *array = @[@"1", @"2"];
NSString *str = array[0];
NSMutable *mutableArray = [@[@"1"] mutableCopy];


字典可以这么写:
1
2
NSDictionary *dict = @{@"name" : @"Jason", @"password" : @"Hello,world"};
NSString *name = dict[@"name"];


上述写法多简洁啊!让coder从冗长的语法中脱离出来。
更新:上面有两行代码(下标取值),我没测试就想当然自己添加上去了,编译不过请见SO

编译器为我们做了些事情(代码片段摘自WWDC 2012 Session 405):
1
2
3
4
5
6
7
8
9
// when you write this:
dict = @{ k1 : o1, k2 : o2, k3 : o3 };
// compiler generates:
id objects[] = { o1, o2, o3 };
id keys[] = { k1, k2, k3 };
NSUInteger count = sizeof(objects) / sizeof(id);
dict = [NSDictionarydictionaryWithObjects:objects
                                   forKeys:keys
                                     count:count];


我们也可以在自定义对象中添加如下方法来支持下标取值特性:
1
2
3
4
5
6
- (id)objectAtIndexedSubscript:(NSUInteger)idx {
    return container[idx];
}
- (void)setObject:(id)obj atIndexedSubscript:(NSUInteger)idx {
    container[idx] = obj;
}


不过,这种语法仍然不支持常量容器。关于compile-time c*****tant,这里有一份讨论。
对此,我们可以采用类方法initialize(代码片段摘自WWDC 2012 Session 405):
1
2
3
4
5
6
7
8
9
10
11
@implementation MyClass
static NSArray *thePlanets;
+ (void)initialize {
    if (self == [MyClass class]) {
        thePlanets = @[
        @"Mercury", @"Venus", @"Earth",
        @"Mars", @"Jupiter", @"Saturn",
        @"Uranus", @"Neptune"
        ];
    }
}

关于initialize类方法,这里有一份讨论,这里有一份说明,包括为何要判断self类型——因为子类没有实现该方法的话,子类收到消息会转发给父类。
为什么放在initialize类方法中就可以呢?

而字典是没有常量一说的,即不存在常量字典。
为什么?

5. End
更详细请看:http://clang.llvm.org/docs/ObjectiveCLiterals.html
分享到:
评论

相关推荐

    Objective-C基础教程+随书源代码

     Objective-C是创建Mac OS应用和iPhone应用的主要语言,优雅的面向对象编程环境与C语言特性珠联璧合,造就了它的不俗表现。  本书全面而系统地讲述Objective-C语言的基础知识和面向对象编程的重要概念,结合实例...

    Object-C语言教程-提供了 Objective-C 的基本语法和一些示例,希望能够帮助你快速入门 Objective-C

    Objective-C 是一种强大而灵活的编程语言,它结合了 C 语言的性能和灵活性以及面向对象编程的特性。本教程提供了 Objective-C 的基本语法和一些示例,希望能够帮助你快速入门 Objective-C 编程,并开始构建 macOS 和...

    Objective-C基础教程 中文 PDF 清晰版 [31M]

    本书结合理论知识与示例程序,全面而系统地讲述Objective-C编程的相关内容,包括Objective-C在C的基础上引入的特性和Cocoa工具包的功能及其中的框架,以及继承、复合、源文件组织等众多重要的面向对象编程技术。...

    Objective-C基础教程(第2版).pdf

    本书结合理论知识与示例程序,全面而系统地讲述Objective-C编程的相关内容,包括Objective-C在C的基础上引入的特性和Cocoa工具包的功能及其中的框架,以及继承、复合、源文件组织等众多重要的面向对象编程技术。...

    Objective-C基础教程

    Objective-C是创建Mac OS应用和iPhone应用的主要语言,优雅的面向对象编程环境与C语言特性珠联璧合,造就了它的不俗表现。 《Objective-C基础教程》全面而系统地讲述Objective-C语言的基础知识和面向对象编程的重要...

    Objective-C基础教程随书源码

    Objective-C是创建Mac OS应用和iPhone应用的主要语言,优雅的面向对象编程环境与C语言特性珠联璧合,造就了它的不俗表现。 《Objective-C基础教程》全面而系统地讲述Objective-C语言的基础知识和面向对象编程的重要...

    用 Objective-C 实现《大话设计模式》书中的例子,并用一些 Objective-C 的特性对例子的实现加以优化.zip

    用 Objective-C 实现《大话设计模式》书中的例子,并用一些 Objective-C 的特性对例子的实现加以优化.zip,用 Objective-C 实现《大话设计模式》书中的例子,并用一些 Objective-C 的特性对例子的实现加以优化

    Objective-C课大三作业.rar

    内容概要:这份作业包含了多个...通过完成这些案例,学生可以加深对Objective-C语言特性和编程技巧的理解,提升编程能力和解决问题的能力。 其他说明:建议学生在完成这些案例时,注重理解每个案例涉及的概念和原

    用 Objective-C 实现《大话设计模式》书中的例子,并用一些 Objective-C 的特性对例子的实现加以优化

    用 Objective-C 实现《大话设计模式》书中的例子,并用一些 Objective-C 的特性对例子的实现加以优化,希望能对初学设计模式的 iOS 开发者有所帮助。 前言 在某些人看来学习设计模式没有什么意义,因为在实际工作中...

    Objective-C开发范例代码大全

    展示如何使用Objective-C语言的独有特性以及Foundation框架的众多特性。此外,书中广 泛提供了多种问题的解决方案,包括: ● 使用Xcode进行应用开发 ● 使用字符串、数字与对象集合 ● 使用NSArray、NSString、...

    Effective Objective-C 2.0

    从语法、接口与api设计、内存管理、框架等7大方面总结和探讨了objective-c编程中52个鲜为人知和容易被忽视的特性与陷阱。书中包含大量实用范例代码,为编写易于理解、便于维护、易于扩展和高效的objective-c应用提供...

    Objective-C基础教程清晰版pdf和随书源码.zip

    清晰的Objective-C基础教程和随书源码,本书全面而系统地讲述Objective-C语言的基础知识和面向对象编程的重要概念,结合实例介绍了Cocoa工具包的优秀特性和其中的框架,以及继承、复合、源文件组织、内存管理、对象...

    Objective-C-2.0程序设计-基本的C语言特性.ppt

    Objective-C-2.0程序设计-基本的C语言特性.ppt

    [Objective-c程序设计].杨正洪等.扫描版

    13.3 Objective-C2.0的新特性199 13.4 小结200 第14章 AppKit简介201 14.1 构建项目201 14.2 构建AppController@interface203 14.3 InterfaceBuilder203 14.4 布局用户界面205 14.5 连接207 14.5.1 连接输出口207 ...

    Objective-C基础教程(第2版)

    权威解读Objective-C和Cocoa特性.全面涵盖最新技术和新增工具.iPhone、iPad、Mac开发必备.Objective-C是一门面向对象、通用、高级、强大的编程语言。它有着优雅的编程环境,并发扬了C语言的优秀特性,是苹果的iOS和...

    Objective-C基础教程源码

    《Objective-C基础教程(第2版)》结合理论知识与示例程序,全面而系统地介绍了Objective-C编程的相关内容,包括Objective-C在C的基础上引入的特性、Cocoa工具包的功能及框架,以及继承、复合、源文件组织等众多重要的...

    objective-c基础

    objective-c语言基础,主要介绍objective-c相对于c语言的特性以及objective-c语言的语法,适合初学者阅读。

Global site tag (gtag.js) - Google Analytics