`
miss大为
  • 浏览: 82562 次
  • 性别: 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编程全解最新版.pdf.zip

    1. **Objective-C基础**:Objective-C是在C语言基础上扩展的,因此,理解C语言的基本语法是必要的。Objective-C添加了消息传递机制、类和协议等面向对象特性。 2. **消息传递**:Objective-C中的对象通过发送消息来...

    Objective-C基础教程(入门教程).pdf

    1. Objective-C版本:文中提到了Objective-C11,这是指Objective-C语言的一个版本,随着编程语言的不断更新,版本号会有所变化,但通常指的是支持最新特性的Objective-C语言。 2. HelloWorld程序:这是任何编程语言...

    Objective-c语言学习-快速入门完整版完整版

    Objective-C是在C语言基础上扩展的,引入了Smalltalk的面向对象特性,如消息传递机制,使得代码更加灵活和可扩展。 "第二讲 数据类型、运算符和表达式"深入讲解了基本的数据类型,包括整型、浮点型、字符型等,以及...

    Objective-C 2.0 运行时系统编程指南

    7. **属性声明**:解释了如何声明和使用属性,特别是Objective-C 2.0中引入的新特性。 #### 运行时系统的版本和平台 Objective-C运行时系统有两个主要版本:早期版本和现行版本。 - **早期版本**:该版本主要用于...

    windows 下搭建 Objective-C 开发环境

    接下来,您可以开始探索Objective-C的各种特性和功能,逐步深入学习和开发iOS应用程序了。希望这份指南能够帮助您顺利入门,祝您学习进步! 总结来说,在Windows系统下搭建Objective-C开发环境虽然不像在Mac OS X上...

    Objective-C高级编程 iOS与OS X多线程和内存管理_Objective-C_ios_

    书中还可能涵盖Block(代码块)的使用,这是Objective-C中一种强大的语法特性,常用于多线程和异步编程,因为它可以捕获和封装变量的上下文。另外,可能会讲解到Cocoa Touch和Cocoa框架中的线程安全类和方法,以及...

    Objective-C语言特性及其在iOS和macOS开发中的应用

    适合人群:对面向对象编程和iOS/macOS开发感兴趣的开发人员,尤其是希望深入了解Objective-C语言特性的程序员。 使用场景及目标:帮助开发者理解和掌握Objective-C的基本概念和高级特性,提高他们在苹果生态系统的...

    Objective-C与Objective-C++的混用代码示例

    Objective-C是基于C语言的,主要用于构建iOS和macOS应用程序,而Objective-C++则是Objective-C的一个扩展,它引入了C++的特性,使得开发者可以同时利用Objective-C的动态特性和C++的面向对象编程能力。 ### ...

    Objective-C程序设计 第6版 pdf

    4. **Objective-C 2.0新特性**:第六版可能会涵盖Objective-C 2.0引入的一些新特性,如垃圾回收、属性(properties)和块(blocks)等,这些都是现代Objective-C编程不可或缺的部分。 5. **内存管理**:Objective-C...

    C语言主要知识点巩固(学习Objective-C 的前提)

    在掌握了这些C语言基础知识后,你将更好地理解和学习Objective-C,因为Objective-C是在C语言的基础上扩展的面向对象编程语言,它保留了C的大部分语法,并引入了类、消息传递等面向对象特性。因此,牢固的C语言基础...

    《Objective-C基础教程》中文版(含源代码)

    3. **Objective-C语法**:深入解析Objective-C的语法特性,如消息传递、方法定义、属性声明、类别(Category)和协议(Protocol)等,以及如何使用这些特性编写代码。 4. **Foundation框架**:介绍Objective-C开发...

    Objective-C的语法与Cocoa框架.pdf

    Objective-C语法的基石是C语言的语法结构,这意味着所有的C语言代码都可以在Objective-C中直接使用。但是,Objective-C在C的基础上新增了消息传递机制,这是它与C语言的一个重要区别。在Objective-C中,方法调用是...

    Objective-C2.0程序设计第二版中文版及代码

    1. **Objective-C基础**:Objective-C是在C语言基础上扩展的,添加了面向对象特性。它的基础包括类、对象、消息传递等概念。类定义了对象的属性和行为,对象则是类的实例。消息传递是Objective-C的核心,通过`...

    Objective-C.2.0 中文版.pdf & Objective-C.chm

    Objective-C的关键特性包括: 1. **面向对象**:它基于Smalltalk,引入了类、对象、继承、多态等概念。 2. **动态类型**:在Objective-C中,类型信息是在运行时确定的,这使得代码更灵活但可能增加调试难度。 3. **...

    Objective-C专业书籍汇总pdf

    Objective-C 2.0带来了许多改进,这本书会深入探讨这些新特性。这可能包括垃圾回收(Garbage Collection)的引入,虽然在现代Xcode中已被 ARC(Automatic Reference Counting)取代,但理解其工作原理仍然有价值。...

    objective-c基础教程

    Objective-C继承了C语言的基础语法结构,并在此基础上增加了面向对象的特性,包括类(Class)、对象(Object)、消息传递(Message Passing)等概念。具体特点如下: 1. **动态性**: Objective-C是一种动态类型的语言,这...

    这是一个基于Objective-C语言的基础案例集 旨在用于给初学者快速了解Objective-C语言的语法 .zip

    6. categories:Objective-C的类别机制允许向已存在的类添加新的方法,而无需修改原有代码,这是Objective-C的一个强大特性。 7. blocks:Blocks是Objective-C的匿名函数,可以捕获和存储当前作用域内的变量。它们...

    Objective-C

    Objective-C是在C语言的基础上扩展了Smalltalk式的面向对象特性,使得它既有C语言的强大功能,又具备了面向对象编程的灵活性。 在Objective-C中,类是所有对象的基础。类定义了一组属性(实例变量)和方法(函数)...

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

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

    Objective-C基础教程(Learn Objective-C)随书源码下载

    Objective-C是C语言的超集,它扩展了C语言,加入了面向对象的特性。面向对象编程(OOP)的核心概念包括类、对象、继承、封装和多态。Objective-C通过消息传递机制实现了这些概念,使得代码更加模块化和可维护。 2....

Global site tag (gtag.js) - Google Analytics