1、方法调用基本语法
[object method];
[object methodWithInput:input];
方法可以有返回值:
output = [object methodWithOutput];
output = [object methodWithInputAndOutput:input];
还可以调用累方法:
id myStr = [NSString string];
[color=red]id类型意味着myStr可以是任意类型的对象。[/color]
或者:NSString* myStr = [NSString string];
[color=red]注意:在对象类型的右边有一个星号(*),在Objective-C中所有的对象变量都是指针类型,id类型已经被预定义为指针类型,所以不需要加一个星号。[/color]
2、方法嵌套调用
在许多编程语言中,嵌套的方法或函数是这样调用的:
function1(function2()); //function2()的返回值作为参数传递给function1()。
在Objective-C中,嵌套的方法或函数调用:
[NSString stingWithFormat:[prefs format]];
[color=blue]要尽量避免在一行语句中进行两层以上的嵌套,这样会使代码的可读性降低。[/color]
3、多个输入参数的方法定义
在Objective-C中,一个方法的名字可以被拆分成几段:
- (BOOL) writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;
你可以这样调用这个方法:
BOOL result = [myDate writeToFile:@"/tmp/log.txt" atomically:NO];
[color=red]这些不是命名参数。在运行中,该方法的名字实际上是:writeToFile:atomically:[/color]
4、点操作符
在Mac OS X 10.5中,Objective-C 2.0新增了点操作符的设置器(setter)和获取器(getter):
user.name = @"Mike"; //[user setName:@"Mike"];
output = user.name; //output = [user name];
[color=red]区别:点语法只能使用在设置器(setter)和获取器(getter)上,而不能用于普通方法![/color]
5、在Nil上调用方法
在Objective-C中,nil对象的作用等同于其他语言的NULL指针。[color=red]不同的地方在于,在nil上调用方法不会导致程序崩溃或抛出异常。[/color]
6、类的创建
在Objective-C语法中,一个类通常分为两部分:类的接口(头文件)和类的实现。
类的接口(interface)通常存放在类似ClassName.h的文件中,在这里我们定义实例变量和公用方法(public)。
类的实现存放在ClassName.m这样的文件中,它实现了接口中定义的方法。通常还可以定义外面不能访问的私有方法(private)。
User.h
--------------------
#import <Cocoa/Cocoa.h>
@interface User : NSObject
{
NSString* username;
NSString* password;
}
- (NSString*) username;
- (NSString*) password;
- (void) setUsername:(NSString*) input;
- (void) setPassword:(NSString*) input;
@end
User.m
--------------------
#import "User.h"
@implemention User
- (NSString*) username
{
return username;
}
- (NSString*) password
{
return password;
}
- (void) setUsername:(NSString*) input
{
[username autorelease];
username = [input retain];
}
- (void) setPassword:(NSString*) input
{
[password autorelease];
password = [input retain];
}
@end
[color=red]在Objective-C中,get这个词有着特殊含义,获取器(getter)是不带get前缀的。方法前面的减号(-)表示这是一个实例方法,如果方法名前面是个加号(+),表示这是一个类方法。[/color]
[color=blue]释放一个对象有两种方法:release和autorelease。标准的release会立即释放对象的引用,autorelease直到当前方法结束才会释放(除非你添加自定义的代码来明确的改变它)。[/color]
7、类目(Category)
类目是Objective-C中最有用的一个特性。类目允许你为一个已存在的类添加一些方法,而不用子类化该类,也不需要你了解该类的实现细节。
例如:我想给NSString添加一个方法,判断它是不是一个URL,写法如下:
NSString-NSStringHelper.h
-------------------------------
#import <Cocoa/Cocoa.h>
@interface NSString (NSStringHelper)
- (BOOL) isURL;
@end
这很像一个类的声明,不同的地方在于后面没有列出父类,并且在括号里写了类目的名字。
类目的名字可以随便取,但最好能表达出你在类目中包含的方法所要做的事。
#import "NSString-NSStringHelper.h"
@implemention NSString (NSStringHelper)
- (BOOL) isURL
{
if ([self hasPrefix:@"http://"])
return YES;
else
return NO;
}
@end
现在你可以使用NSString的这个方法了:
NSString* str1 = @"http://www.iteye.com";
NSString* str2 = @"HelloWorld";
if ([str1 isURL])
NSLog(@"str1 is a URL.");
if ([str2 is URL])
NSLog(@"str2 is a URL");
内容更新中。。。。。
[object method];
[object methodWithInput:input];
方法可以有返回值:
output = [object methodWithOutput];
output = [object methodWithInputAndOutput:input];
还可以调用累方法:
id myStr = [NSString string];
[color=red]id类型意味着myStr可以是任意类型的对象。[/color]
或者:NSString* myStr = [NSString string];
[color=red]注意:在对象类型的右边有一个星号(*),在Objective-C中所有的对象变量都是指针类型,id类型已经被预定义为指针类型,所以不需要加一个星号。[/color]
2、方法嵌套调用
在许多编程语言中,嵌套的方法或函数是这样调用的:
function1(function2()); //function2()的返回值作为参数传递给function1()。
在Objective-C中,嵌套的方法或函数调用:
[NSString stingWithFormat:[prefs format]];
[color=blue]要尽量避免在一行语句中进行两层以上的嵌套,这样会使代码的可读性降低。[/color]
3、多个输入参数的方法定义
在Objective-C中,一个方法的名字可以被拆分成几段:
- (BOOL) writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;
你可以这样调用这个方法:
BOOL result = [myDate writeToFile:@"/tmp/log.txt" atomically:NO];
[color=red]这些不是命名参数。在运行中,该方法的名字实际上是:writeToFile:atomically:[/color]
4、点操作符
在Mac OS X 10.5中,Objective-C 2.0新增了点操作符的设置器(setter)和获取器(getter):
user.name = @"Mike"; //[user setName:@"Mike"];
output = user.name; //output = [user name];
[color=red]区别:点语法只能使用在设置器(setter)和获取器(getter)上,而不能用于普通方法![/color]
5、在Nil上调用方法
在Objective-C中,nil对象的作用等同于其他语言的NULL指针。[color=red]不同的地方在于,在nil上调用方法不会导致程序崩溃或抛出异常。[/color]
6、类的创建
在Objective-C语法中,一个类通常分为两部分:类的接口(头文件)和类的实现。
类的接口(interface)通常存放在类似ClassName.h的文件中,在这里我们定义实例变量和公用方法(public)。
类的实现存放在ClassName.m这样的文件中,它实现了接口中定义的方法。通常还可以定义外面不能访问的私有方法(private)。
User.h
--------------------
#import <Cocoa/Cocoa.h>
@interface User : NSObject
{
NSString* username;
NSString* password;
}
- (NSString*) username;
- (NSString*) password;
- (void) setUsername:(NSString*) input;
- (void) setPassword:(NSString*) input;
@end
User.m
--------------------
#import "User.h"
@implemention User
- (NSString*) username
{
return username;
}
- (NSString*) password
{
return password;
}
- (void) setUsername:(NSString*) input
{
[username autorelease];
username = [input retain];
}
- (void) setPassword:(NSString*) input
{
[password autorelease];
password = [input retain];
}
@end
[color=red]在Objective-C中,get这个词有着特殊含义,获取器(getter)是不带get前缀的。方法前面的减号(-)表示这是一个实例方法,如果方法名前面是个加号(+),表示这是一个类方法。[/color]
[color=blue]释放一个对象有两种方法:release和autorelease。标准的release会立即释放对象的引用,autorelease直到当前方法结束才会释放(除非你添加自定义的代码来明确的改变它)。[/color]
7、类目(Category)
类目是Objective-C中最有用的一个特性。类目允许你为一个已存在的类添加一些方法,而不用子类化该类,也不需要你了解该类的实现细节。
例如:我想给NSString添加一个方法,判断它是不是一个URL,写法如下:
NSString-NSStringHelper.h
-------------------------------
#import <Cocoa/Cocoa.h>
@interface NSString (NSStringHelper)
- (BOOL) isURL;
@end
这很像一个类的声明,不同的地方在于后面没有列出父类,并且在括号里写了类目的名字。
类目的名字可以随便取,但最好能表达出你在类目中包含的方法所要做的事。
#import "NSString-NSStringHelper.h"
@implemention NSString (NSStringHelper)
- (BOOL) isURL
{
if ([self hasPrefix:@"http://"])
return YES;
else
return NO;
}
@end
现在你可以使用NSString的这个方法了:
NSString* str1 = @"http://www.iteye.com";
NSString* str2 = @"HelloWorld";
if ([str1 isURL])
NSLog(@"str1 is a URL.");
if ([str2 is URL])
NSLog(@"str2 is a URL");
内容更新中。。。。。