美文网首页
swift基础_指针

swift基础_指针

作者: 李永开 | 来源:发表于2022-04-10 18:05 被阅读0次

一.swift指针类型

swift认为指针是不安全的,所有指针的类的前缀为unsafe

  • UnsafePointer : 指定类型的指针,指针不可变, 相当于const Type *
  • UnsafeMutablePointer : 限定类型的指针,可变指针,相当于 Type *
  • UnsafeRawPointer: 不限定类型, 可以指向任何类型,但是不可变, 相当于 const void *
  • UnsafeMutableRawPointer: 指向任意类型,而且可变,相当于void *
swift c
UnsafePointer const Type *
UnsafeMutablePointer Type *
UnsafeRawPointer const void *
UnsafeMutableRawPointer void *

二.swift指针内存管理

源码demo

///     let bytesPointer = UnsafeMutableRawPointer.allocate(byteCount: 4, alignment: 1)
///     bytesPointer.storeBytes(of: 0xFFFF_FFFF, as: UInt32.self)
///
///     // Load a value from the memory referenced by 'bytesPointer'
///     let x = bytesPointer.load(as: UInt8.self)       // 255
///
///     // Load a value from the last two allocated bytes
///     let offsetPointer = bytesPointer + 2
///     let y = offsetPointer.load(as: UInt16.self)     // 65535

自己操作指针,在allocate后要进行deallocate释放该指针


三.withUnsafeMutablePointer的使用

var i = 11

let p0 = withUnsafeMutablePointer(to: &i, {$0})
print(p0.pointee)//11

//不简写的状态
let p1 = withUnsafeMutablePointer(to: &i) { ptr in
    return ptr
}
print(p1.pointee)//11

//@inlinable public func withUnsafeMutablePointer<T, Result>(to value: inout T, _ body: (UnsafeMutablePointer<T>) throws -> Result) rethrows -> Result
//可以返回其他值,因为Result的值是由闭包的Result决定的
let p2 = withUnsafePointer(to: &i) { ptr in
    ptr.pointee + 10
}
print(p2)//21 此时的p2就是一个Int值,而不是指针

四.Unmanaged

class Cls {
}
var c = Cls()
let ptr = Unmanaged.passUnretained(c as AnyObject).toOpaque()
print(ptr)//0x00006000026c40c0
  • 注意:Unmanaged和withUnsafeMutablePointer获取到的地址不一样,需要研究下
  • 使用bindMemory可以修改类型

相关文章

  • swift基础_指针

    一.swift指针类型 swift认为指针是不安全的,所有指针的类的前缀为unsafe UnsafePointer...

  • Swift指针|内存管理

    一、Swift指针 1.Swift指针简介 swift中的指针分为两类 typed pointer 指定数据类型指...

  • swift pointer

    swift 指针 swift中的指针分为两类 typed pointer 指定数据类型指针,即 UnsafePoi...

  • 在Swift中使用C语言的指针

    在Swift中使用C语言的指针 在Swift中使用C语言的指针

  • swift 指针学习

    学习资料 Swift 指针UnsafePointerUnsafe Swift: Using Pointers an...

  • Swift-进阶 04:指针

    本文主要介绍swift中的指针 swift中的指针分为两类 typed pointer 指定数据类型指针,即 Un...

  • Swift进阶 04:指针

    本文主要介绍Swift中的指针 Swift中的指针主要分为两类 typed pointer 指定数据类型的指针,即...

  • siwft指针

    swift 指针 UnsafePointer,UnsafeMutablePointer ,可变和不可变指针可以相互...

  • Swift5.1 - 指针Pointer

    指针分类 使用swift提供指针类型: UnsafePointer UnsafeMutablePointer Un...

  • swift中的指针

    Swift 中的指针使用 本文转载自OneV's Den的blogApple 期望在 Swift 中指针能够尽量减...

网友评论

      本文标题:swift基础_指针

      本文链接:https://www.haomeiwen.com/subject/mqfsdrtx.html