自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Objective-C學(xué)習(xí)中對 C語言的擴(kuò)展

移動(dòng)開發(fā) iOS
Objective-C學(xué)習(xí)中對 C 的擴(kuò)展是本文要介紹的內(nèi)容,Objective-C和Cocoa是蘋果公司Mac OS X操作系統(tǒng)的核心。Objective-C語言是C語言的一個(gè)擴(kuò)展集,來看本文內(nèi)容詳解。

Objective-C學(xué)習(xí)中對 C 的擴(kuò)展是本文要介紹的內(nèi)容,Objective-C和Cocoa是蘋果公司Mac OS X操作系統(tǒng)的核心。Objective-C語言C語言的一個(gè)擴(kuò)展集,許多具備Mac OS X外觀的應(yīng)用程序都是使用該語言開發(fā)的。Cocoa是使用Objective-C編寫的工具包,它不僅包含Mac OS X用戶界面的所有元素,還包含其他許多內(nèi)容。

Objective-C文件的擴(kuò)展名是.m,在Xcode中,.m文件、.c文件(標(biāo)準(zhǔn)C程序)、.cpp(C++程序)文件的編譯工作都由GCC(GNU Compiler Collection)處理。

  1. #import 

C語言一樣,Objective-C使用頭文件來包含元素聲明,這些元素包括結(jié)構(gòu)體、符號常量、函數(shù)原型等。C語言使用#include語句通知編譯器應(yīng)在頭文件中查詢定義,而在Objective-C程序中通常會(huì)使用#import來實(shí)現(xiàn)這個(gè)目的。

#import可保證頭文件只被包含一次,而不論此命令實(shí)際上在那個(gè)文件中出現(xiàn)了多少次。在C語言中,程序員通常使用基于#ifdef命令的方案來避免一個(gè)文件包含另一個(gè)文件,而后者又包含***個(gè)文件的情況。而在Objective-C中,程序員使用#import實(shí)現(xiàn)這個(gè)功能。

  1. #import <Foundation/Foundation.h>  

此語句告訴編譯器查看Foundation框架中的Foudation.h頭文件。Foudation框架處理的是用戶界面之下的層(Layer)中的特性,例如數(shù)據(jù)結(jié)構(gòu)和通信機(jī)制,Objective-C中的大多數(shù)程序都以Foundation框架為基礎(chǔ)。

  1. NSLog()和@"字符串"   

Cocoa對其所有函數(shù)、常量和類型名稱都添加了"NS"前綴,這個(gè)前綴告訴程序員和編譯器函數(shù)來自Cocoa而不是其他工具包。兩個(gè)不同工具包使用相同標(biāo)識符時(shí)會(huì)導(dǎo)致名稱沖突,而前綴可以預(yù)防這個(gè)大問題。由于沒有集中管理的前綴注冊表,所以程序員可以任意選用前綴,許多人使用他們的姓名首字母或公司名稱作為前綴。鑒于Cocoa已占用了"NS"前綴,程序員在為自建的變量或函數(shù)名稱添加前綴時(shí)就不應(yīng)該再用"NS"了,以免發(fā)生混亂。

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

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

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

@符號是Objective-C在標(biāo)準(zhǔn)C語言基礎(chǔ)上添加的特性之一。雙引號中的字符串前有一個(gè)@符號,這表示引用的字符串應(yīng)該作為Cocoa的NSString元素來處理。

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

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

(1)告知其長度;

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

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

還有許多功能是使用C風(fēng)格字符串無法實(shí)現(xiàn)的,以后在使用中會(huì)做進(jìn)一步的說明。

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

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

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

如果要運(yùn)行這個(gè)程序,他可能會(huì)崩潰。要捕捉這樣的問題,可以讓Xcode總是將警報(bào)作為錯(cuò)誤來處理。

布爾類型  

C語言擁有布爾數(shù)據(jù)類型bool,它具有true值和false值。Objective-C提供了相似的類型BOOL,它具有YES值和NO值。這兩種不同的布爾類型可以在同一個(gè)程序中共存,但在編寫Cocoa代碼時(shí)要使用BOOL。

Objective-C中的BOOL實(shí)際上是一種對帶符號的字符類型(signed char)的定義(typedef),它使用8位存儲(chǔ)空間。YES定義為1,而NO定義為0(使用#define)。Objective-C并不將BOOL作為僅能保存YES值或NO值得真正的布爾類型來處理。編譯器將BOOL認(rèn)作8位二進(jìn)制數(shù),YES值和NO值只是一種約定。這引發(fā)了一個(gè)小問題:如果不小心將一個(gè)長于1字節(jié)的整型值(例如short或int值)賦給一個(gè)BOOL變量,那么只有低位字節(jié)會(huì)用作BOOL值。假設(shè)該低位字節(jié)剛好為0,BOOL值將會(huì)是0,即NO值。

小結(jié):Objective-C學(xué)習(xí)中對 C語言的擴(kuò)展的內(nèi)容介紹完了,希望本文對你有所幫助!

責(zé)任編輯:zhaolei 來源: 網(wǎng)絡(luò)轉(zhuǎn)載
相關(guān)推薦

2011-05-11 11:20:26

Objective-C

2014-08-05 13:09:34

Objective-C動(dòng)態(tài)特性

2011-08-04 14:58:37

Objective-C Cocoa NSString

2013-08-21 14:57:42

objective-c問題

2011-05-11 14:06:49

Objective-C

2011-08-15 17:06:01

Objective-CNSLog

2014-04-28 09:56:56

Objective-CiOS命名空間

2011-07-25 10:03:06

Objective-C 委托

2011-08-05 14:03:39

Objective-C 對象 模板

2010-11-24 10:35:40

Objective-C

2016-03-30 09:56:07

c語言變量聲明objectivec

2014-04-15 11:27:50

C++開發(fā)者Objective-C核心語法

2011-08-18 09:21:17

Objective-C

2011-08-15 17:47:13

Objective-CisMemberOfC

2011-08-10 18:07:29

Objective-C反射

2011-05-11 15:58:34

Objective-C

2013-03-27 12:54:00

iOS開發(fā)Objective-C

2013-06-20 10:40:32

Objective-C實(shí)現(xiàn)截圖

2011-07-25 10:14:13

Objective-C Xcode

2011-07-25 10:30:41

Objective-C Xcode 重構(gòu)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號