Objective-C是Mac软件开发领域最主要的开发语言,假如我们对C语言已经很熟悉或者具有面向对象语言的基础,对于我们学习Objective-C将会非常有用。
方法调用(Calling Methods)
为了能够尽快上手,我们先来看一些简单的例子。Objective-C语法里面基本的方法调用是这样的:
[object method];
[object methodWithInput:input];
对象的方法可以返回值:
output = [object methodWithOutput];
output = [object methodWithInputAndOutput:input];
我们也可以在类里面调用如何创建对象的方法。下面的这个例子里面,我们调用了NSString类的string方法:
id myObject = [NSString string];
id的类型意味着myObject这个变量可以指向任意类型的变量。当我们编译这个应用程序的时候,并不知道他实现的真实的类和方法。
在这个例子里面,很明显这个对象的类型应该是NSString,所以我们可以改一下他的类型:
NSString* myString = [NSString string];
现在myString就是一个NSString类型的变量。这个时候假如我们试图使用一个NSString没有实现的方法时,编译器就会警告我们。
一定要注意在对象类型的右边有一个星号。所有的Objective-C对象变量都是指针类型的。id类型已经预先被定义成一个指针类型了。所以我们不需要再加星号。
嵌套消息调用(Nested Messages)
在许多编程语言里面嵌套消息,或者嵌套函数看起来就像这样:
function1 ( function2() );
function2的返回值被传递给function1当输入参数。在Objective-C里面,嵌套消息调用就像这样:
[NSString stringWithFormat:[prefs format]];
我们应该尽量避免在一行代码里面嵌套调用超过两个。因为这样的话,代码的可读性就不太好。
多参输入的方法(Multi-Input Methods)
多个输入参数的方法。在Objective-C里面,一个方法名可以被分割成几段。在头文件里面,就应该这样子来定义一个多输入参数的方法:
-(BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;
我们这样来调用它:
BOOL result = [myData writeToFile:@"/tmp/log.txt" atomically:NO];
参数不一定要给它命名。在运行期系统里面这个方法真实的名字叫writeToFile:atomically:。
Accessors(Getter & Setter)
在Objective-C里面所有的实例对象默认都是私有的。所有在大多数情况下我们需要用accessors去读取或者设置变量的值。有两个语法都支持这样的操作,这个时传统的老的语法:
[photo setCaption:@"Day at the Beach"];
output = [photo caption];
第二行的代码其实并非直接去读对象实例的变量。事实上它调用的是名叫caption的方法。在Objective-C里大多数情况下我们不需要给getters加get的前缀。
无论什么时候我们见到方括号,其实我们都是向一个对象或者一个类发送了一个消息。
Dot Syntax
在Objective-C 2.0里面,新增加了一个"."操作的语法。在Mac OS X 10.5里面就使用了Objective-C 2.0语法:
photo.caption = @"Day at the Beach";
output = photo.caption;
我们两种方式都可以使用。但是在一个工程里面最好保持风格一致,只使用某一种。"."操作只能够被使用在setters和getters里面,而不能用在一般意思的方法上。
创建对象
主要有两种方式来创建一个对象。第一种办法像这面这样:
NSString* myString = [NSString string];
这是一种非常习惯性的风格。在这种方式情况下,我们创建的是系统自动释放(autoreleased)类型的对象。关于自动释放类型autoreleased,我们以后会深入讨论一下。然而在许多情况下,我们需要手动的去创建对象:
NSString* myString = [[NSString alloc] init];
这是一个嵌套的方法调用。第一个调用的NSString自己的alloc方法。这是一个相对比较底层的调用,因为他创建了内容,以及实例化了一个对象。
第二块代码调用了新创建对象的init方法。这个init方法实现了比较常用的
方法调用(Calling Methods)
为了能够尽快上手,我们先来看一些简单的例子。Objective-C语法里面基本的方法调用是这样的:
[object method];
[object methodWithInput:input];
对象的方法可以返回值:
output = [object methodWithOutput];
output = [object methodWithInputAndOutput:input];
我们也可以在类里面调用如何创建对象的方法。下面的这个例子里面,我们调用了NSString类的string方法:
id myObject = [NSString string];
id的类型意味着myObject这个变量可以指向任意类型的变量。当我们编译这个应用程序的时候,并不知道他实现的真实的类和方法。
在这个例子里面,很明显这个对象的类型应该是NSString,所以我们可以改一下他的类型:
NSString* myString = [NSString string];
现在myString就是一个NSString类型的变量。这个时候假如我们试图使用一个NSString没有实现的方法时,编译器就会警告我们。
一定要注意在对象类型的右边有一个星号。所有的Objective-C对象变量都是指针类型的。id类型已经预先被定义成一个指针类型了。所以我们不需要再加星号。
嵌套消息调用(Nested Messages)
在许多编程语言里面嵌套消息,或者嵌套函数看起来就像这样:
function1 ( function2() );
function2的返回值被传递给function1当输入参数。在Objective-C里面,嵌套消息调用就像这样:
[NSString stringWithFormat:[prefs format]];
我们应该尽量避免在一行代码里面嵌套调用超过两个。因为这样的话,代码的可读性就不太好。
多参输入的方法(Multi-Input Methods)
多个输入参数的方法。在Objective-C里面,一个方法名可以被分割成几段。在头文件里面,就应该这样子来定义一个多输入参数的方法:
-(BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;
我们这样来调用它:
BOOL result = [myData writeToFile:@"/tmp/log.txt" atomically:NO];
参数不一定要给它命名。在运行期系统里面这个方法真实的名字叫writeToFile:atomically:。
Accessors(Getter & Setter)
在Objective-C里面所有的实例对象默认都是私有的。所有在大多数情况下我们需要用accessors去读取或者设置变量的值。有两个语法都支持这样的操作,这个时传统的老的语法:
[photo setCaption:@"Day at the Beach"];
output = [photo caption];
第二行的代码其实并非直接去读对象实例的变量。事实上它调用的是名叫caption的方法。在Objective-C里大多数情况下我们不需要给getters加get的前缀。
无论什么时候我们见到方括号,其实我们都是向一个对象或者一个类发送了一个消息。
Dot Syntax
在Objective-C 2.0里面,新增加了一个"."操作的语法。在Mac OS X 10.5里面就使用了Objective-C 2.0语法:
photo.caption = @"Day at the Beach";
output = photo.caption;
我们两种方式都可以使用。但是在一个工程里面最好保持风格一致,只使用某一种。"."操作只能够被使用在setters和getters里面,而不能用在一般意思的方法上。
创建对象
主要有两种方式来创建一个对象。第一种办法像这面这样:
NSString* myString = [NSString string];
这是一种非常习惯性的风格。在这种方式情况下,我们创建的是系统自动释放(autoreleased)类型的对象。关于自动释放类型autoreleased,我们以后会深入讨论一下。然而在许多情况下,我们需要手动的去创建对象:
NSString* myString = [[NSString alloc] init];
这是一个嵌套的方法调用。第一个调用的NSString自己的alloc方法。这是一个相对比较底层的调用,因为他创建了内容,以及实例化了一个对象。
第二块代码调用了新创建对象的init方法。这个init方法实现了比较常用的