您好,登錄后才能下訂單哦!
原創(chuàng)文章,歡迎轉(zhuǎn)載。轉(zhuǎn)載請(qǐng)注明:關(guān)東升的博客
如果引入必要的頭文件,在Objective-C語(yǔ)言中可以使用C數(shù)據(jù)類型。而在Swift語(yǔ)言中是不能直接使用C數(shù)據(jù)類型,蘋果公司為Swift語(yǔ)言提供與C語(yǔ)言相對(duì)應(yīng)數(shù)據(jù)類型。這些類型主要包括:C語(yǔ)言基本數(shù)據(jù)類型和指針類型。
C語(yǔ)言基本數(shù)據(jù)類型
如表所述是Swift數(shù)據(jù)類型與C語(yǔ)言基本數(shù)據(jù)類型對(duì)應(yīng)關(guān)系表。
Swift語(yǔ)言中的這些數(shù)據(jù)類型與Swift原生的數(shù)據(jù)類型一樣都,本質(zhì)上都是結(jié)構(gòu)體類型。我們可以他們的構(gòu)造函數(shù)創(chuàng)建這些數(shù)據(jù)類型的實(shí)例。示例代碼如下:
var intSwift = 80 //int var intNumber = NSNumber(int: CInt(intSwift)) //unsigned char varunsignedCharNumber =NSNumber(unsignedChar: CUnsignedChar(intSwift)) //unsigned int var unsignedIntNumber = NSNumber(unsignedInt:CUnsignedInt(intSwift))
變量intSwift所存儲(chǔ)80是Int類型。代碼中CInt(intSwift)是實(shí)例化CInt類型,它實(shí)現(xiàn)了將Int類型轉(zhuǎn)化為C語(yǔ)言int類型,在Swift中使用CInt表示。
代碼中CUnsignedChar(intSwift)是將Int類型轉(zhuǎn)化為C語(yǔ)言unsigned char類型,在Swift中使用CUnsignedChar表示。
代碼中的CUnsignedInt(intSwift))是將Int類型轉(zhuǎn)化為C語(yǔ)言unsigned int類型,在Swift中使用CUnsignedInt表示。
C語(yǔ)言指針類型
如表所述是Swift數(shù)據(jù)類型與C語(yǔ)言指針數(shù)據(jù)類型對(duì)應(yīng)關(guān)系表。
從表可見針對(duì)C語(yǔ)言多樣的指針形式,Swift主要通過(guò)提供了三種不安全的泛型指針類型:UnsafePointer<T>、UnsafeMutablePointer<T>和AutoreleasingUnsafeMutablePointer<T>。T是泛型占位符,表示不同的數(shù)據(jù)類型。另外,還有COpaquePointer類型是Swift中無(wú)法表示的C指針類型。
下面我們分別介紹一下。
1.UnsafePointer<T>
UnsafePointer<T>是一個(gè)比較常用的常量指針類型,這種指針對(duì)象需要程序員自己手動(dòng)管理內(nèi)存,即需要自己申請(qǐng)和釋放內(nèi)存。它一般是由其他的指針創(chuàng)建。它的主要的構(gòu)造函數(shù)有:
init(_ other: COpaquePointer)。通過(guò)COpaquePointer類型指針創(chuàng)建。
init<U>(_ from: UnsafeMutablePointer<U>)。通過(guò)UnsafeMutablePointer類型指針創(chuàng)建。
init<U>(_ from: UnsafePointer<U>)。通過(guò)UnsafePointer類型指針創(chuàng)建。
UnsafePointer<T>主要的屬性:
memory。只讀屬性,它能夠訪問指針指向的內(nèi)容。
UnsafePointer<T>主要的方法:
successor() -> UnsafePointer<T>。獲得指針指向的下一個(gè)內(nèi)存地址的內(nèi)容。
predecessor() -> UnsafePointer<T>。獲得指針指向的上一個(gè)內(nèi)存地址的內(nèi)容。
2. UnsafeMutablePointer<T>
UnsafeMutablePointer<T>是一個(gè)比較常用的可變指針類型,這種指針對(duì)象需要程序員自己手動(dòng)管理內(nèi)存,自己負(fù)責(zé)申請(qǐng)和釋放內(nèi)存??勺冎羔樋梢杂善渌闹羔槃?chuàng)建,也可以可變指針通過(guò)alloc(_:)方法申請(qǐng)內(nèi)存空間,再調(diào)用initialize(_:)方法初始化指針指向數(shù)值。當(dāng)指針對(duì)象釋放時(shí)候需要調(diào)用destroy()方法銷毀指針指向?qū)ο?,它?/span>initialize(_:)方法的反向操作,他們兩個(gè)方法在代碼中應(yīng)該成對(duì)出現(xiàn)的。最后還要調(diào)用dealloc(_:)方法釋放指針指向的內(nèi)存空間,它是alloc(_:)方法的反向操作,這兩個(gè)方法在代碼中也應(yīng)該成對(duì)出現(xiàn)。
3. AutoreleasingUnsafeMutablePointer<T>
AutoreleasingUnsafeMutablePointer<T>被稱為自動(dòng)釋放指針,在方法或函數(shù)中聲明為該類型的參數(shù),是輸入輸出類型的,在調(diào)用方法或函數(shù)過(guò)程中,參數(shù)先首先被拷貝到一個(gè)無(wú)所有權(quán)的緩沖區(qū),在方法或函數(shù)內(nèi)使用的這個(gè)緩沖區(qū),當(dāng)方法或函數(shù)返回時(shí),緩沖區(qū)數(shù)據(jù)重新寫回到參數(shù)。
歡迎關(guān)注關(guān)東升新浪微博@tony_關(guān)東升。
關(guān)注智捷課堂微信公共平臺(tái),了解最新技術(shù)文章、圖書、教程信息
更多精品iOS、Cocos、移動(dòng)設(shè)計(jì)課程請(qǐng)關(guān)注智捷課堂官方網(wǎng)站:http://www.zhijieketang.com
智捷課堂論壇網(wǎng)站:http://51work6.com/forum.php
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。