一、OC概述
1、OC是一種通用的面向對象的程式設計語言,它擴充了ANSI C程式設計語言,将SmallTalk式的消息傳遞機制加入到ANSI C中。它是蘋果的OS X(X表示第十代)和IOS作業系統,及其相關的API、Cocoa和Cocoa Touch的主要程式設計語言。
2、OC主要做UI界面,C語言、C++ 可用于圖形處理。
3、OC基于C語言,在C語言的基礎上增加了一層最小面對對象文法,可以完全相容C語言。也就是說,可以在OC開發中混入C語言代碼和C++文法。
二、語言預覽
1、沒有包名(命名空間)的概念
沒有命名空間的概念,取而代之的是開發人員給類名加上字首,來防止雷鳴沖突。比如,NSstring(OC中的字元串)、NSArray(OC中的數組,相當于Java中的list),字首都是NS。
2、OC中的關鍵字和字元串都是以@開頭。
(1)因為在OC 中可以混入C文法,C++文法,是以為了和其他文法關鍵字加以區分,OC的關鍵字都以@開頭,例如:
@interface
聲明類
@implementation
實作類
@protocol
聲明協定
@optional
與@protocol配合使用,說明協定中的某個或者某幾個方法可以不實作
@required
與@protocol配合使用,說明協定中的某個方法或者某幾個方法必須實作
@end
與@interface ,@implementation,@protocol配合使用,代表聲明或者實作結束
@encode
@encode為編譯器宏,它可以将類型轉換為相應的字元串。
這些具體怎麼用,我們先不用追究,等以後我會詳細的跟大家來講。
(2)OC中的字元串也是以@開頭,比如:@”Hello World!”,其中Hello World!就是我們需要的字元串。
NSLog(@"Hello World!");
三、語言比較
1、函數對比
我們先簡單寫一個Student方法
Java語言
public void Student (int age) {
}
C++語言
void Student(int age) {
}
OC語言
-(void) Student:(int)age{
}
2.消息傳遞
Objective-C使用消息傳遞(本質是字元串),是以方法、類和對象可以在運作時确定和修改。Java的方法是與class靜态綁定的,雖然可以在運作時用反射的機制擷取,但效率會下降1個數量級,隻在極端的情況下使用。也就是說,前者更加動态。
//在OC語言中,消息傳遞
[object message:param1 withParameter:param2]
NSString *string;
string = [[NSString alloc] initWithString:@"Hello"];
3、垃圾回收
在記憶體管理方面Java是垃圾回收,而Objective-C是引用計數。前者發生在運作時,後者在編譯期。2011的WWDC中Apple展示了最新的ARC(Automatic Reference Counting),極大減輕了程式員管理記憶體的負擔,但其本質依然是編譯期的基于引用計數的記憶體管理。
補充:雖然OC也可以用垃圾回收,不過使用的人很少,這也是後來ARC出現的原因吧。
4、self及this
在OC中的self 相當于Java中的this
類似于:c++/java
this.method();
5、繼承關系和接口實作
OC語言中
Student:People
ClassA:ParentA<Protocol>
ClassA <Protocol>
Java語言中
Student extends People
ClassA extends ParentA implements interface
ClassA implements interface
6、空指針
id obj = nil;
NSString *hello = nil;//nil相當與Java中的null