1.Objective-C是C的超集,所以C能使用的代码,Objective-C也能使用
2.Objective-C代码使用.m文件而不是.c/.cpp
3.Objective-C导入头文件使用#import "xxx.h"或者import <xxx.h>,#import指令会自动检查之前是否已经导入过这个文件。
所以在头文件里没必要使用 #ifndef 或者 #program once来避免一个文件被包含多次了
4.方法和消息
Objective-C中,想执行一个类或者对象的方法,可以发送一条消息给类或者对象
在下面的代码中的[NSDate date],其中NSDate就是消息接受者,这是一个类,而date则是消息
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { NSDate *now=[NSDate date]; NSLog(@"now's address is %p\n",now); NSLog(@"now is %@\n",now); double seconds=[now timeIntervalSince1970]; NSLog(@"since 1970 is %.2f s\n",seconds); } return 0; }
date方法执行后,会做以下事情
- 在堆上分配一个NSDate的对象
- 将这个对象初始化为当前的日期/时间
- 返回这个对象的地址
这类似于C++里的静态成员函数
class NSDate{ public: static NSDate date(); }
同样,也可以将对象作为消息的接受者,例如上面的[now timeIntervalSince1970]
5.发送消息时,也可以传递参数,如下面的代码
writeToFile接受四个参数,其中automcally,encoding,error不应该理解为参数名,而是方法名的一部分
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { NSHost *host=[NSHost currentHost]; NSString *hostName=[host localizedName]; NSLog(@"主机名 is %@\n",hostName); [hostName writeToFile:@"/tmp/cool.txt" atomically:YES encoding:NSUTF8StringEncoding error:NULL]; } return 0; }
6.每个Objective-C类都有一个默认的创建对象方法,例如
NSDate *now=[[NSDate alloc] init]
7.与大多数面向对象编程语言不同,Objective-C允许向一个空对象(nil)发送消息,例如
now=nil; double seconds=[now timeIntervalSince1970];