從C語言到OC

2021-06-28 05:43:27 字數 3511 閱讀 4180

ios開發(包括iphone和ipad上的應用)使用的是objective-c這種語言,oc語言誕生於2023年,也是一門較為古老的語言。oc是完全相容c語言的,也就意味著c語言中所有的語法特性在oc中都是可以使用的,所以很多用c語言開發的庫和函式,是可以在oc語言中直接使用的(這也是oc語言中大部分關鍵字使用@開頭的原因,主要是為了在同一檔案中區分c和oc**)。但是oc的基本語法職工又有不同於c語言的部分。本文主要介紹一些c語言開發到oc語言開發轉變過程中疑惑的部分:

1.檔案的副檔名為什麼是.m?

objective-c剛誕生的時候,副檔名.m代表message,指的是objective-c的乙個主要特性。因為oc是一種不同於c語言(面向過程)的物件導向語言,類或物件的方法都是以訊息的形式傳遞,而不是簡單地函式,因此在objective-c這門語言中處處有傳遞訊息的**(其實 就是在呼叫類方法),所以oc原始檔以.m為副檔名。

2.基本資料型別中增加了bool型別

bool型別是一種取值只有真和假的資料型別,在其他語言中非常常見,objective-c為了彌補c語言中缺乏的bool型別,使用c語言中得typedefine關鍵字定義了一種新的bool型別:

typedef signed char bool;
並且定義了兩種取值

#define yes             ((bool)1)

#define no ((bool)0)

這樣在遇到判斷真假的時候,就可以使用bool型別,而不需再使用沒有實在意義的0和1。

3.nil型別

objective-c中的nil型別相當於在c語言中的null型別,在xcode中按住command鍵進入.h標頭檔案可以看到對nil型別的巨集定義

#   define nil __darwin_null

#define __darwin_null ((void *)0)

由上面的兩段定義可知oc中得nil與c語言中得null是基本相同的。

但是由於oc是物件導向的語言,nil不僅可以表示基本資料型別和指標型別中的0的含義,而且還可以表示乙個沒有值的類型別,因此oc中得nil用法更加豐富,所以建議要再oc程式中使用nil,而不再使用c語言中的null。

4.#import預處理命令

作用跟#include一樣,用來拷貝某個檔案的內容,但是為什麼不用#include而使用新增的#import。

因為在oc中的#import指令有更加豐富的功能

#import是gcc編譯器提供的xcode在編譯objective-c、c和c++程式時都會使用它,#import可保證標頭檔案只包含一次,而不論此命令實際上在那個檔案中出現了多少次。

#import可以自動防止檔案內容被拷貝多次,也就以為著標頭檔案中不用像編寫c語言程式時加入下面的繁瑣的預處理指令了

#ifndef _stdio_h_

#define _stdio_h_

#endif

因此以後再編寫oc程式時,可以放心大膽地拋棄#include指令。

5.oc中的關鍵字和字串型別

在oc語言大部分關鍵字都以@開頭,其中最常見的關鍵字有下面幾個:

@inte***ce、@implementation、@end 

@public、@protected、@private、@selector

@try、@catch、@throw、@finally

@protocol、@optional、@required、@class

@property、@synthesize、@dynamic

self、super、id、_cmd、__block、__strong、__weak、

oc語言中的字串不同於c語言中得字串,它不是簡單的字元陣列,而是以@開頭的包裝型別(類型別)

比如@"hello"是oc中的字串,而"hello"則是c語言中的字串

6..基本輸出函式nslog

objective-c中有比c語言中更高階的輸出函式nslog主要的區別如下

ø   nslog接收oc字串作為引數,printf接收c語言字串作為引數

ø   nslog輸出後會自動換行,printf輸出後不會自動換行

ø   使用nslog需要#import

ø   使用printf需要#include

7.foudation框架

在oc語言中,使用的類、結構體、和函式被定義在.h檔案中(而實現則放在了.m檔案中),一些公司或者個人開發了一些具有特定功能的框架(framework),裡面有許多.h和.m檔案,而要使用這些框架或者框架中得某些函式、類或結構體必須使用#import關鍵字引入包含他們的標頭檔案,而以框架名命名的主標頭檔案包含了這個框架中所有的函式、類和結構體的宣告(在不知道要具體新增哪個標頭檔案時,通常新增主標頭檔案即可),例如

#import

意味著要新增foundation框架下的foundation.h檔案其中框架名和標頭檔案以"/"隔開。

幾乎所有的oc程式都要新增foundation框架,因為

ø   foundation開發oc、ios、mac程式必備的框架

ø   此框架中包含了很多常用的api(應用程式設計介面)

8.如何編譯和鏈結oc檔案

就是在鏈結階段 需要新增oc程式中使用的框架(指明–framework引數),例如:

ø   編譯:cc –cmain.m test.m

ø   執行:./a.out

9.乙個完整的oc程式

總結前面所介紹的內容,可以不再對oc程式陌生了,下面是乙個完整的oc版的hello world

#import int main(int argc, const char * argv)

開啟終端cd到檔案所在的目錄,然後

編譯:

cc -c hello.m

cc hello.o -framework foundation

執行:

./a.out

終端螢幕上顯示:

hello, world!

從C語言到C 語言

c 讀作 c加加 是 c plus plus 的簡稱。顧名思義,c 是在c語言 的基礎上增加新特性。從語法上看,c語言是 c 的一部分,c語言 幾乎不用修改就能夠以 c 的方式編譯。對於c和c 的關係,有很多種說法,新人很容易認為c 是c的公升級版,c 比c要高階,c 高大上,c過時了,這種想法不一...

從C語言到C (一)

1.輸入輸出流 using std cout 標準輸出流 using std endl 換行 cout em1.t a cout endl 2.結構體的宣告 在c 裡,不需要加struct 3.類的定義 類名稱前面加c,類成員前面加m 如果不加關鍵字public和 預設為 private 即如果你在...

從C語言到彙編,從彙編到C語言

看雪一同志寫的文章,我覺得很基礎和有用,知識著眼於小處。積累才是王道!一 迴圈語句與發彙編後的機器語言 1 for迴圈 下面是一段c語言的 我們的目的是來看其反彙編的結果 int myfunction int a,int b return c 前面的反彙編暫時不理它,這裡從for的地方開始反彙編,結...