Objective-C學習中對 C語言的擴充

來源:互聯網
上載者:User

Objective-C學習中對 C 的擴充是本文要介紹的內容,Objective-C和Cocoa是蘋果公司Mac OS X作業系統的核心。Objective-C語言C語言的一個擴充集,許多具備Mac OS X外觀的應用程式都是使用該語言開發的。Cocoa是使用Objective-C編寫的工具包,它不僅包含Mac OS X使用者介面的所有元素,還包含其他許多內容。

Objective-C檔案的副檔名是.m,在Xcode中,.m檔案、.c檔案標準C程式)、.cppC++程式)檔案的編譯工作都由GCCGNU Compiler Collection)處理。

 
  1. #import 

C語言一樣,Objective-C使用標頭檔來包含元素宣告,這些元素包括結構體、符號常量、函數原型等。C語言使用#include語句通知編譯器應在標頭檔中查詢定義,而在Objective-C程式中通常會使用#import來實現這個目的。

#import可保證標頭檔只被包含一次,而不論此命令實際上在那個檔案中出現了多少次。在C語言中,程式員通常使用基於#ifdef命令的方案來避免一個檔案包含另一個檔案,而後者又包含第一個檔案的情況。而在Objective-C中,程式員使用#import實現這個功能。

 
  1. #import <Foundation/Foundation.h>  

此語句告訴編譯器查看Foundation架構中的Foudation.h標頭檔。Foudation架構處理的是使用者介面之下的層Layer)中的特性,例如資料結構和通訊機制,Objective-C中的大多數程式都以Foundation架構為基礎。

 
  1. NSLog()和@"字串" 

Cocoa對其所有函數、常量和類型名稱都添加了"NS"首碼,這個首碼告訴程式員和編譯器函數來自Cocoa而不是其他工具包。兩個不同工具包使用相同標識符時會導致名稱衝突,而首碼可以預防這個大問題。由於沒有集中管理的首碼註冊表,所以程式員可以任意選用首碼,許多人使用他們的姓名首字母或公司名稱作為首碼。鑒於Cocoa已佔用了"NS"首碼,程式員在為自建的變數或函數名稱添加首碼時就不應該再用"NS"了,以免發生混亂。

NSLog()這個Cocoa函數和C語言中的printf()很相似,它接受一個字串作為其第一個參數,該字串可包含格式說明符如%d),還可以接受匹配格式說明符的其他參數。NSLog()函數和printf()函數的區別在於,前者添加了一些特性,例如時間戳記、日期戳和自動附加分行符號'\n')等。beauty註:這個特性太有用了,我所有的VC程式中都有自己寫的一個函數WriteLog(),完成的是和NSLog()幾乎一樣的功能。

我們來看下這條NSLog()語句:

 
  1. NSLog(@"Hello, Objective-C!"); 

@符號是Objective-C在標準C語言基礎上添加的特性之一。雙引號中的字串前有一個@符號,這表示引用的字串應該作為Cocoa的NSString元素來處理。

大多數Cocoa元素都以非常直接的方式命名,名稱盡量描述出他們可實現的特性。例如,NSArray提供數組,NSDateFormatter協助程式員用不同方式來格式化日期,NSThread提供多線程變成工具,NSSpeechSynthesizer使使用者聽到語音。相應的,NSString就是Cocoa中的一串字元。

NSString類型有許多打包的特性,Cocoa在需要字串時可隨時使用它們。下面是一些NSString功能。

(1)告知其長度;

(2)將自身與其他字串比較;

(3)將自身轉換為整型值或浮點值。

還有許多功能是使用C風格字串無法實現的,以後在使用中會做進一步的說明。

printf()函數中沒有和NSString類型相應的格式說明符,因此我們不能將其作為參數傳遞給printf()函數。而NSLog()函數針對NSString類型添加了%@格式說明符,從而使得NSLog()函數可以接受相應的參數,將其作為NSString使用該字串中的字元。

如果將C風格的字串而不是專門的NSString的@"字串"元素)傳遞給NSLog(),編譯器會給出警告:

 
  1. main.m:46: waring: passing arg 1 of `NSLog` from incompatible pointer type  

如果要運行這個程式,他可能會崩潰。要捕捉這樣的問題,可以讓Xcode總是將警報作為錯誤來處理。

布爾類型

C語言擁有布林值資料型別bool,它具有true值和false值。Objective-C提供了相似的類型BOOL,它具有YES值和NO值。這兩種不同的布爾類型可以在同一個程式中共存,但在編寫Cocoa代碼時要使用BOOL。

Objective-C中的BOOL實際上是一種對帶符號的字元類型signed char)的定義typedef),它使用8位儲存空間。YES定義為1,而NO定義為0使用#define)。Objective-C並不將BOOL作為僅能儲存YES值或NO值得真正的布爾類型來處理。編譯器將BOOL認作8位位元,YES值和NO值只是一種約定。這引發了一個小問題:如果不小心將一個長於1位元組的整型值例如short或int值)賦給一個BOOL變數,那麼只有低位位元組會用作BOOL值。假設該低位位元組剛好為0,BOOL值將會是0,即NO值。

小結:Objective-C學習中對 C語言的擴充的內容介紹完了,希望本文對你有所協助!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.