【转】Objective-C的语法格式

Objective-C的语法格式(参照别人的文档,小小的一笔记)
最近做的一项目中要参照mac机上的代码,它使用的是其特有的 Objective-C的语言,

由于需要,所以自己找资料了解了下,并参照别人的文档写了一个小小的笔记。

1 #import #include 包含头文件

@class String; 类前置申明

@interface NewClass : Object

{

@public int aValue;

@protected //缺省情况下只能被子类所见 int value2;

@private //不可见 int mrInvisible;

}

NewClass是Object的派生类

method既有“类”的(也有些人叫做“工厂”的),也有“实例”的。类method只能由类对象访问,实例method显然由实例访问。

+ 表示 类 method - 表示 实例 method

然后,在“( )”中你填入method返回值的类型,除非你返回的是代表任何对象的通用类型id。在然后,如果你的method有参数的话,你先写一个“:”,跟着是在“( )”中间的参数类型,再接着是变量名。你可以一直写下去,直到以“;”结束。 同时,在第一个参数之后和下一个“:”之前,你还可以放入一些单词,但单词与“:”之间不能有空格。 也许你现在已经糊涂了,让我们看一个类和实例method。

+createWith: (int)value; //足够简单

-(void)say: (String *)what to: (String *)name; //第一个参数是what,to是method名称的一部分。

在参数表中间使用额外的单词可以使得method念起来更容易理解。就象上面第二个method,念起来象“say 'Hello' to jik”,而不是“say 'Hello', jik”。 可变长度参数表的语法和C语言中是一样的:

-(void)doStuff: (id)format,...;

@end // 告诉编译器我们完成定义了:

消息 /函数 的使用

[object jumpAround];

[object jump: forward]; //forward 为参数

“object”可以是一个类也可以是类的一个实例。通常类以大写字母开头,而实例则以小写开头。如果“object”是类的话,你只能要求它执行类method,反之亦然。

例如,要建立类“Object”的一个新实例,我们可以使用...: [Object alloc];

“alloc”是为新对象分配内存的类method。但这样并不能使得对象能够使用,因为它的实例变量还没有初始化...要那样做的话,我们调用“init”...因此,我们需要做的全部事情是: id object=[Object alloc]; [object init];

上面两句等价于: id object=[[Object alloc] init];

类的实现:

@implementation NewClass (这里可以再次说明其基类,也可以不说)

以下是一个简短的method定义的例子:

-sayHello { printf("Hello world! ");

return self; }

下面一个例子是有参数使用消息的:

-say: (String *)What { printf("%s ",[what cString]);

return self; }

@end

新数据类型 BOOL是布尔类型,可以是YES或NO,NO为0,YES为非0。 STR为char *。 IOD为FILE *。 id是代表任何ObjC对象的通用类型。

SEL类型是代表method的变量。你可以要求对象执行SEL代表的method。你用@selector(methodName)来创建SEL。“methodName”是method名的ObjC表示形式。例如前面提到的“say:to:”。

IMP用C语言指针代表一个method。这用于你需要节省寻找消息的处理程序的时间的情况下,因为IMP是对method的直接链接。通常用于需要高速度的循环过程中。 这些也许对你来说基本够用了......象我前面说过的,这篇文章不应该是关于ObjC的唯一资源。

类别(Catagory)

@interface ClassName (CatagoryName) @implementation ClassName(CatagoryName) ClassName是你要扩展的类的名称,CatagoryName是类别的识别的名称。类别可以访问所扩展的类的实例变量。

协议(Protocol)

协议,顾名思义,定义一组类之间相互遵守的行为规范。协议没有界面和实现,但他们与界面更加相似。你不需要添加新的实例变量,也不添加新的method或定义任何method的内部实现。协议所需要做的只是定义一套要求所有类都必须包含的method,以遵循这个协议。

@protocol ProtocolName 接着是任意数量的method的声明,请使用在界面定义的相同的语法。最后以@end结束。

@interface NewObject : Object 上述的语句告诉编译器这是一个叫NewObject的对象,它的超类是Object,并要符合ProtocolName的协议。

要查询一个对象是否满足特定的协议,可以使用“conformsTo"的mthod。 [object conformsTo:@protocol(ProtocolName)]; 这会根据对象是否符合的情况返回YES或NO。

要查询一个参数是否符合特定的协议,可以象如下地声明method: -method:(id)argument;

相关推荐