美文网首页
Swift中指针的使用

Swift中指针的使用

作者: xgou | 来源:发表于2018-03-23 10:52 被阅读5次

UnsafePointer、UnsafeMutablePointer一种是不可变的,一种是可变的。

UnsafePointer我的理解就是用来做传参数用的,不可写。而我们平常用的最多的就是UnsafeMutablePointer。

指针初始化

var a = UnsafeMutablePointer<Int>.allocate(capacity: 1);// 声明一个指针,指针类型是Int,内存大小就是1份Int的大小
a.pointee = 10;//指针a的值设定是10

获取对象指针

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

指针运算

let aptr = UnsafeMutablePointer<Int>.allocate(capacity: 5); //申明一个5份Int大小的内存空间
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 对象来管理引用计数

let thisPointer = Unmanaged<UIViewController>.passUnretained(self).toOpaque();
得到self的指针地址。然后再通过
let this = Unmanaged<UIViewController>.fromOpaque(thisPointer).takeRetainedValue()
将其转换回来。

passRetained & passUnretained 强弱引用
takeRetainedValue & takeRetainedValue 强弱引用

强制指针类型转换

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

相关文章

  • [转] Swift 中的指针使用

    原文Swift 中的指针使用

  • swift中的指针

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

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

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

  • Swift-04:指针

    今天我们来看看swift中的指针是如何如何使用的 swift中的指针分为两类 typed pointer 指定数据...

  • 纯代码讲解swift的指针

    swift的指针: Objective-C和C语言经常需要使用到指针。Swift中的数据类型由于良好的设计,...

  • Swift 中的指针使用

    Apple 期望在 Swift 中指针能够尽量减少登场几率,因此在 Swift 中指针被映射为了一个泛型类型,并且...

  • Swift5.1 - 指针Pointer

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

  • Swift指针|内存管理

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

  • swift pointer

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

  • Swift进阶 04:指针

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

网友评论

      本文标题:Swift中指针的使用

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