Swift 里的指针
2024-08-24 22:35:42

基础知识
指针的内存状态
typed? | initiated? |
---|---|
❌ | ❌ |
✅ | ❌ |
✅ | ✅ |
之前分配的内存可能被释放,使得指针指向了未被分配的内存。
有两种方式可以使得指针指向的内存处于Uninitialized
状态:
- 刚刚被分配内存
- 内存被
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
的地址,有三种出路:
- 以相同类型被 reinitialized
- bound to a new type
- deallocated
typed pointer 状态转换
untrivial pointee

trivial pointee

相比之下,pointee 类型是 trivial 的,可以进行更多的操作。
最新文章
- Linux OpenVPN 服务端吊销(revoke)客户端证书
- 云虚拟主机开源 DedeCMS 安装指南
- XE7 提交 App(iOS 8)提示「does not contain the correct beta entitlement」问题修复
- python os.path模块常用方法详解:转:http://wangwei007.blog.51cto.com/68019/1104940
- a标签的妙用-拨打电话、发送短信、发送邮件
- JAVA if条件语句,switch多分支结构,与逻辑运算符
- 使用dynamic来简化反射实现
- UVA 10129 Play on Words
- python-邮件提醒功能
- Java多线程编程核心技术(三)多线程通信
- xdoj-1279(有趣的线段树--吉司机?!)
- leetcode 443. String Compression
- spring boot (三): 热部署
- Thymeleaf 学习笔记
- 【转】python基础-编码与解码
- springboot集成AOP管理日志
- 使用JavaScript修改浏览器URL地址栏的实现代码
- Python 词云 【中/英】小白简单入门教程
- struts-resultType属性
- Java基础之身份证验证