Swift中指針的使用

UnsafePointer、UnsafeMutablePointer一種是不可變的,一種是可變的。

UnsafePointer我的理解就是用來(lái)做傳參數(shù)用的,不可寫(xiě)。而我們平常用的最多的就是UnsafeMutablePointer。

指針初始化

var a = UnsafeMutablePointer<Int>.allocate(capacity: 1);// 聲明一個(gè)指針,指針類(lèi)型是Int,內(nèi)存大小就是1份Int的大小
a.pointee = 10;//指針a的值設(shè)定是10

獲取對(duì)象指針

var f : Int = 1;
var fPointer = withUnsafePointer(to: &f) {
return $0;
}

指針運(yùn)算

let aptr = UnsafeMutablePointer<Int>.allocate(capacity: 5); //申明一個(gè)5份Int大小的內(nèi)存空間
aptr.initialize(from: [33,34,35,36,37]); // 初始化
print("0_\(aptr.pointee)");
let a = aptr.advanced(by: 1); // 指針后移
print("1_\(a.pointee)");
let b = a.successor(); // 指針后移
print("2_\(b.pointee)");
let c = b + 1; // 指針后移
print("2_\(c.pointee)");

Unmanaged 對(duì)象來(lái)管理引用計(jì)數(shù)

let thisPointer = Unmanaged<UIViewController>.passUnretained(self).toOpaque();
得到self的指針地址。然后再通過(guò)
let this = Unmanaged<UIViewController>.fromOpaque(thisPointer).takeRetainedValue()
將其轉(zhuǎn)換回來(lái)。

passRetained & passUnretained 強(qiáng)弱引用
takeRetainedValue & takeRetainedValue 強(qiáng)弱引用

強(qiáng)制指針類(lèi)型轉(zhuǎn)換

pointer.withMemoryRebound(to: Int.self, capacity: 1, { (p2) -> Void in
print(p2.pointee)
})
上面代碼等同于
UnsafeRawPointer(pointer).bindMemory(to: Int.self, capacity: 1)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容