1.Objective-C是C的超集,所以C能使用的代碼,Objective-C也能使用
2.Objective-C代碼使用.m文件而不是.c/.cpp
3.Objective-C導(dǎo)入頭文件使用#import "xxx.h"或者import <xxx.h>,#import指令會自動檢查之前是否已經(jīng)導(dǎo)入過這個文件。
所以在頭文件里沒必要使用 #ifndef 或者 #program once來避免一個文件被包含多次了
4.方法和消息
Objective-C中,想執(zhí)行一個類或者對象的方法瓦盛,可以發(fā)送一條消息給類或者對象
在下面的代碼中的[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方法執(zhí)行后,會做以下事情
- 在堆上分配一個NSDate的對象
- 將這個對象初始化為當(dāng)前的日期/時間
- 返回這個對象的地址
這類似于C++里的靜態(tài)成員函數(shù)
class NSDate{
public:
static NSDate date();
}
同樣处窥,也可以將對象作為消息的接受者嘱吗,例如上面的[now timeIntervalSince1970]
5.發(fā)送消息時,也可以傳遞參數(shù),如下面的代碼
writeToFile接受四個參數(shù)谒麦,其中automcally俄讹,encoding,error不應(yīng)該理解為參數(shù)名绕德,而是方法名的一部分
#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類都有一個默認(rèn)的創(chuàng)建對象方法患膛,例如
NSDate *now=[[NSDate alloc] init]
7.與大多數(shù)面向?qū)ο缶幊陶Z言不同,Objective-C允許向一個空對象(nil)發(fā)送消息耻蛇,例如
now=nil;
double seconds=[now timeIntervalSince1970];