天天看點

IOS開發基礎Object-C(01)— OC概述及比較

一、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