Swift 里的指针

基础知识

指针的内存状态

typed?initiated?

之前分配的内存可能被释放,使得指针指向了未被分配的内存。
有两种方式可以使得指针指向的内存处于Uninitialized状态:

  1. 刚刚被分配内存
  2. 内存被deinitialized
var bytes: [UInt8] = [39, 77, 111, 111, 102, 33, 39, 0]
let uint8Pointer = UnsafeMutablePointer<UInt8>.allocate(capacity: 8)

此时,uint8Pointer处于Uninitialized状态。

已经被初始化的内存,可以通过pointee属性或者下标方式访问。

let ptr: UnsafePointer<Int> = ...
// ptr.pointee == 23
// ptr[0] == 23

Typed Pointers

指向内存能否改动可否进行边界检查
UnsafePointer
UnsafeMutablePointer
UnsafeBufferPointer
UnsafeMutableBufferPointer

Raw Pointers

即指向的内存没有特定类型。

Use raw pointers and buffers to access memory for loading and storing as raw bytes.

  • automated memory management ❌
  • type safety ❌
  • alignment guarantees ❌

指针类型转换

前提条件

Memory that has been bound to a type can be rebound to a different type only after it has been deinitialized or if the bound type is a trivial type

  • 内存已经被 deinitialized
  • 内存指向的类型是 trivial 的

deinitialized 的地址,有三种出路:

  1. 以相同类型被 reinitialized
  2. bound to a new type
  3. deallocated

typed pointer 状态转换

untrivial pointee

trivial pointee

相比之下,pointee 类型是 trivial 的,可以进行更多的操作。

转载于:https://www.cnblogs.com/huahuahu/p/Swift-li-de-zhi-zhen.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值