1. 程式人生 > >十分鐘讓你明白Objective-C的語法(和Java、C++的對比)

十分鐘讓你明白Objective-C的語法(和Java、C++的對比)

很多想開發iOS,或者正在開發iOS的程式設計師以前都做過Java或者C++,當第一次看到Objective-C的程式碼時都會頭疼,Objective-C的程式碼在語法上和Java, C++有著很大的區別,有的同學會感覺像是看天書一樣。不過,語言都是相通的,有很多共性。下面列出Objective-C語言的語法和Java,C++的對比,這樣你就會很容易Objective-C的語法是怎麼回事了。

先目睹一下Objective-C標頭檔案和實現檔案裡都有什麼:

標頭檔案:

 

實現檔案, 類似於C++的.cpp檔案:



一、函式的對比

helloworld方法
Java 語言:

public void helloWorld(bool ishelloworld) {
//乾點啥
}
C++語言:
void helloWorld(bool ishelloworld) {
//乾點啥
}
Objective-C語言:
-(void) HelloWorld:(BOOL)ishelloworld{
//乾點啥
}

前面帶有減號(-) 的方法為例項方法,必須使用類的例項才可以呼叫的。對應的有+號, 代表是類的靜態方法,不需要例項化即可呼叫。


二、訊息。
訊息的定義:向物件傳送資訊。
 訊息是ios的執行時環境特有的機制。 和C++,Java下的類,或例項呼叫類或例項的方法類似。我這說的是類似,他們的機制實際上是有很大的差別。
例子:
[object  message]
[object  message:param1 withParameter:param2]
NSString *string;  
string = [[NSString alloc] initWithString:@"Hello"];  

上面的程式碼類似於:
java/c++:object.message()
java/c++:object.message(param1,param2)
java/c++:
string *str ;

str = new string("Hello");

三、Import
例子:
import "Class.h"
import <Class.h>
import <director/Class.h>
這個和C++裡的include ,java的import類似

四 、Property 和Synthesize

Property定義:@property 宣告用於自動建立property屬性變數的getter和setter
Synthesize定義:@Synthesize宣告實現了property屬性變數的getter和setter。

例子:
在  interface:@property dataType variableName
在  implementation:  synthesiz variableName


四、標頭檔案中的方法



例子:

-(returnType)method
-(returnType)method:(dataType)param1
-(returnType)method:(dataType)param1 withParam:(dataType)param2

類似於:
C/C++/Java
returnType method()
returnType method(param1)
returnType method(param1,param2)

五、self 
指向自己的指標
[self method]

類似於:c++/java
this.method();

六、繼承關係和介面實現

例子:

ClassA:ParentA
ClassA:ParentA<Protocol>
ClassA <Protocol>

類似於:
java:
ClassA extends ParentA
ClassA extends ParentA implements interface
ClassA implements interface

objective-c的 Protocol和c++、java的介面類似。

七、空指標

id obj = nil;
NSString *hello = nil;

nil相當與Java中的null;

八、 id

 objective-c的和C++裡的(void*)類似

PS:Objective-C和Java一樣,都有執行時環境,有內省的能力。Objective-C和java有很多不同的地方,在iOS系統裡,Objective-C的記憶體需要自己管理,添加了ARC機制後編譯器幫助了Objective-C  新增release釋放的程式碼。而Java是通過垃圾回收器管理記憶體的。