Objective-C Basic Synax
一.Hello World:
输出:Hello,World!
1.使用 #import 代替 #include.
2.使用NSLog实现了printf的功能:
老乔当年被人挤兑出苹果,自立门户的时候做了个公司叫做NextStep,里面这一整套开发包很是让一些科学家们喜欢,而现在Mac OS用的就是NextStep这一套函数库。这些开发NextStep的人们比较自恋地把函数库里面所有的类都用NextStep的缩写打头命名,也就是NS****了.
类似的,我们还可以看到其他名字打头的一些类,比如CF、CA、CG、UI等等,CF--CoreFoundation,CA--Core Animation,CG--Core Graphics,UI--iPhone的UserInterface.
二.Object Messaging:
这是Objective-C中最大的特色:为了让一个对象去执行某个操作,我们发送一个messaging告诉它去执行某个方法(method):
[receiver message] à[pool drain];
带参数的消息传递:
[obj method: argument method1:argument1];
method 及message 這兩個字是可以互換的。不過 messages 擁有特別的特性,一個 message 可以動態的轉送給另一個物件。在Objective-C 中,呼叫物件上的一個訊息並不一定表示物件真的會實作這個訊息,而是物件知道如何以某種方式去實作它,或是轉送給知道如何實作的物件。[摘取]
三.Class
Objective-C类要求分区接口(interface)与实现(implementation)为两个代码区块,这是强制性的。通常类的接口会放置于头文件内,依C语言的惯例以.h作为扩展名;类的实现则放于代码档以.m为扩展名。
Interface
接口区段里头清楚定义了类的名称,变量,以及方法。 以关键字@interface作为区段起头,@end退出区段.
NSObject为NeXTStep Object 的縮寫。
繼承以 Class:Parent 表示,就像上面的 Car:NSObject。
夾在 @interfaceClass: Parent { .... } 中的稱為 instance variables。
沒有設定存取權限(protected,public, private)時,預設的存取權限為protected。[摘取]
方法前面的+/-号代表方法的类型:加号(+)代表类方法(classmethod)-这里我们并没有用到,不需要实体就可以调用,近于C++的静态成员函数(staticmember function)。减号(-)即是一般的实体方法(instancemethod)。
Objective-C定义一个新的方法时,名称内的冒号(:)代表参数传递,不同于其他语言以数学函数的括号来传递参数。
这里,如果呼叫这个method,我们就用到了之前提到的 [receiver message]:
[car setTire: tireatIndex: index];
Implementation
实做区段则撰写方法的实际运行代码。以关键字@implementation作为区段起头,@end结尾。
CreateObject
Objective-C创建对象需通过两个消息:alloc以及init。alloc的作用是分派存储器空间,init则是对对象做初始化。 init与alloc都是定义在NSObject里的类方法,当对象收到这两个消息并做出正确回应后,新实体才算准备妥当。以下即为示例:
MyObject * my = [[MyObject alloc] init];
在Objective-C 2.0里,可以简化为单独一个消息new
MyObject * my = [MyObject new];
这仅仅是语法上的精简,效用完全相同。 若要自己定义初始化的过程,可以复写init方法,来添加额外的工作。(功用类似C++的constructor)
- (id) init {
if( self=[super init] ){ // 必需呼叫父类的init
// do something here ...
}
return self;
}