亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

詳解Swift中對C語言接口緩存的使用以及數組與字符串轉為指針類型的方法

2020-07-26 02:44:36
字體:
來源:轉載
供稿:網友

詳解Swift中對C語言接口緩存的使用以及數組與字符串轉為指針類型的方法

由于Swift編程語言屬于上層編程語言,而Swift中由于為了低層的高性能計算接口,所以往往需要C語言中的指針類型,由此,在Swift編程語言剛誕生的時候就有了UnsafePointer與UnsafeMutablePointer類型,分別對應為const Type*類型與Type *類型。

而在Swift編程語言中,由于一般數組(Array)對象都無法直接用于C語言中含有指針類型的函數參數(比如:void*),所以往往需要將數組轉為指針類型,此外也需要將數組中元素內容存放到連續的存儲空間。此外,Swift中的字符串對象都是String結構體對象,因此也需要將它們轉換為C語言中const char *類型相兼容的類型,因此這里將給大家介紹一些比較簡便、且純Swift接口的使用方法,而不是借助于Objective-C的Foundation庫。

/** 此函數用于將一個數組(Array)的首個元素的值做加1操作 - parameters:  - p: inout [Int]類型,傳入的數組對象首地址 - returns: Void*/func test(inout p: [Int]) {  p[0] += 1}class ViewController: NSViewController {    override func viewDidLoad() {    super.viewDidLoad()        var a = 0        // 下面使用UnsafeMutablePointer自帶的alloc類方法分配10個Int元素的存儲空間    // 這個方法其實應該就是對malloc函數的封裝了,用于外部的C接口十分有用    let buf = UnsafeMutablePointer<Int>.alloc(10)    let dst = UnsafeMutablePointer<Int>.alloc(10)        // 分別對buf與dst存儲空間進行初始化賦值    for i in 0 ..< 10 {      buf[i] = i      dst[i] = 0    }        // 使用assignBackwardFrom將buf存儲空間中后5個元素拷貝到dst存儲空間的前5個元素中    dst.assignBackwardFrom(buf.advancedBy(5), count: 5)        // 用Array分配一個10個Int元素的數組對象arr    var arr = [Int](count: 10, repeatedValue: 0)        // 將dst中的所有元素拷貝到arr中    for i in 0 ..< 10 {      arr[i] = dst[i]    }    print(arr)        // 釋放buf與dst。注意,這里必須用dealloc來釋放,且里面的參數也要與alloc的參數對應!    // 不釋放會引發內存泄漏    buf.dealloc(10)    dst.dealloc(10)        // arr數組對象指向另一個[1, 2, 3]數組字面量構成的Array對象    arr = [1, 2, 3]        // 調用test函數,使得arr的第一個元素的值加1    test(&arr)    print("arr = /(arr)")        // 這里使用Array的withUnsafeMutableBufferPointer方法將數組元素內容轉為    // 指向一個連續存儲空間的首地址。    // 所以p的類型為:UnsafeMutablePointer<Int>    let p = arr.withUnsafeMutableBufferPointer() {      // 這里,形參是一個含有一個UnsafeMutableBufferPointer的形參,      // 返回類型為UnsafeMutablePointer的函數類型。      (inout buffer: UnsafeMutableBufferPointer<Int>) -> UnsafeMutablePointer<Int> in      return buffer.baseAddress    }        a = 0        // 我們先查看原先數組對象中的元素內容    for i in 0 ..< 3 {      a += p[i]    }    print("a = /(a)")        // 我們通過p指針對象對數組arr的內容進行修改    p[0] -= 1    p[1] += 1    p[2] += 2        // 然后打印出修改后的arr數組對象中的元素內容    print("arr is: /(arr)")        // 這里用nulTerminatedUTF8方法先轉為ContiguousArray<CodeUnit>對象類型,    // 其中,CodeUnit是UInt8類型。    // 然后用withUnsafeBufferPointer轉為UnsafePointer<CChar>類型    let cstr = "abcd".nulTerminatedUTF8.withUnsafeBufferPointer() {      return UnsafePointer<CChar>($0.baseAddress)    }        // 這里再將剛才生成的UnsafePointer<CChar>類型的C格式字符串轉回String對象    let string = String.fromCString(cstr)!    print("string is: /(string)")  }}

上述代碼中,UnsafeMutablePointer的alloc方法也是個很不錯的方法,這個方法應該是直接對C語言標準庫malloc的封裝,可以使得我們方便地在Swift中分配連續的存儲空間,比如對于像圖像處理、矩陣計算等算法尤為實用。當然,如果我們的邏輯主要用Array來處理,然后再交給底層的C語言接口做高性能計算,那么也可以使用數組對象轉連續存儲空間withUnsafeBufferPointer方法,這種處理方式在網絡數據通信中也比較實用。

如有疑問請留言或者到本站社區交流討論,本站關于IOS 開發的文章還有很多,希望大家能搜索查閱,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91tv亚洲精品香蕉国产一区7ujn| 欧美黄色www| 91精品91久久久久久| 亚洲理论在线a中文字幕| 日韩亚洲欧美中文高清在线| 中文字幕亚洲专区| 日韩中文字幕在线视频播放| 亚洲国产一区二区三区在线观看| 欧美性猛交xxxx免费看漫画| 美女av一区二区| 日韩精品视频中文在线观看| 上原亚衣av一区二区三区| 青青草精品毛片| 91在线观看免费高清完整版在线观看| 国产91热爆ts人妖在线| 国产精品一区二区久久久| 伊人久久久久久久久久久| 国产午夜精品一区二区三区| 欧美成人久久久| 欧美一区视频在线| 最新亚洲国产精品| 黄色成人在线免费| 精品亚洲一区二区三区四区五区| 亚洲欧美综合区自拍另类| 日韩精品福利网站| 亚洲欧美一区二区三区在线| 一本大道香蕉久在线播放29| 精品亚洲一区二区三区| 欧美激情视频在线免费观看 欧美视频免费一| 日韩av手机在线看| 亚洲精品www久久久久久广东| 欧美一区二区三区图| 综合网日日天干夜夜久久| 97av在线播放| 欧美亚洲一级片| 日韩中文字在线| 亚洲日韩中文字幕在线播放| 精品久久久免费| 国产在线视频91| 久久国产精品久久久久久| 精品视频偷偷看在线观看| 欧美激情精品久久久久久免费印度| 久久久久在线观看| 中文字幕精品久久| 久久天天躁狠狠躁夜夜躁| 96sao精品视频在线观看| 国产一区二区三区久久精品| 久久久999国产精品| 中文字幕在线观看日韩| 国产精品久久一区| 日韩欧美一区二区三区久久| 亚洲无亚洲人成网站77777| 日韩69视频在线观看| 国产精品扒开腿做爽爽爽视频| 91中文在线视频| 午夜欧美不卡精品aaaaa| 欧美日本亚洲视频| 国产精品91视频| 国产精品视频久久久| 一级做a爰片久久毛片美女图片| 国产精品美乳一区二区免费| 97在线免费视频| 亚洲视频在线视频| 免费av在线一区| 97免费视频在线| 日韩不卡中文字幕| 在线精品视频视频中文字幕| 久色乳综合思思在线视频| 国产91成人video| xx视频.9999.com| 91chinesevideo永久地址| 欧美日韩国产一中文字不卡| 欧美日韩一区二区精品| 26uuu亚洲伊人春色| 日韩精品在线观看视频| 国产精品久久婷婷六月丁香| 伊人男人综合视频网| 欧美视频国产精品| 亚洲综合中文字幕68页| 美女久久久久久久久久久| 亚洲第一福利在线观看| 欧美制服第一页| 热久久视久久精品18亚洲精品| 日韩在线视频二区| 黄网动漫久久久| 亚洲第一精品电影| 黑人狂躁日本妞一区二区三区| 国产精品嫩草视频| 国产精品无av码在线观看| 日韩经典中文字幕在线观看| 日韩av免费网站| 日本免费在线精品| 国产视频久久久久久久| 孩xxxx性bbbb欧美| 欧美一级视频免费在线观看| 国产亚洲人成a一在线v站| 136fldh精品导航福利| 亚洲欧洲中文天堂| 亚洲全黄一级网站| 欧美大片第1页| 亚洲精品综合久久中文字幕| 国产成人精品午夜| 欧美性xxxx极品hd欧美风情| 亚洲精品狠狠操| 日日狠狠久久偷偷四色综合免费| 欧美精品www| 国外成人在线视频| 欧美日韩一区二区三区在线免费观看| 久久资源免费视频| 中日韩美女免费视频网站在线观看| 91九色视频导航| 日本中文字幕久久看| 亚洲成人精品在线| 欧美成人精品h版在线观看| 亚洲乱码国产乱码精品精天堂| 国产日韩在线视频| 国产精品成人av在线| 亚洲自拍偷拍色图| 成人在线激情视频| 亚洲午夜国产成人av电影男同| 亚洲国产精品99久久| 欧美午夜影院在线视频| 亚洲精品天天看| 欧美中文字幕在线观看| 精品久久国产精品| 最近的2019中文字幕免费一页| 91精品国产综合久久香蕉| 色综合久久88色综合天天看泰| 久久久精品视频成人| 国产欧美婷婷中文| 亚洲精品自拍偷拍| 亚洲精品综合久久中文字幕| 91高清免费视频| 国产成人福利视频| 日本精品va在线观看| 亚洲精品欧美日韩| 韩国日本不卡在线| 久久久国产91| 日韩av一区二区在线| 欧美www视频在线观看| 精品日韩美女的视频高清| 欧美日韩激情美女| 欧美日韩精品在线播放| 色777狠狠综合秋免鲁丝| 成人黄色在线播放| 欧美成人四级hd版| 亚州av一区二区| 中文欧美在线视频| 国产精品网址在线| 美女福利视频一区| 欧美国产日本高清在线| 国产精品久久久久久久久免费| 一区二区三区回区在观看免费视频| 97免费视频在线| 欧美视频中文在线看| 亚洲精品电影网在线观看| 欧美一区二粉嫩精品国产一线天| 欧美精品在线观看91| 欧美成人午夜激情视频| xvideos亚洲| 黑人巨大精品欧美一区二区三区| 国产伊人精品在线| 日韩亚洲在线观看| 45www国产精品网站|