由于直接抱着对其他语言的认识来使用swift,这个问题苦恼了我很久,当我用关键词“swift 空指针”搜索也没有得到有用信息,直到我发现swift一定要对可能为空的变量做标记——Optional(?&
UnsafePointer的初始化 var cc = 12 let unsafe = UnsafePointer(&cc) printUnsafeAddress(atAddress: unsafe) 2 UnsafeMutablePointer let dataLength = data.count * MemoryLayout<UInt8>.stride let ptr = UnsafeMutablePointer<UInt8>.allocate let bytes = UnsafeMutablePointer<UInt8>.allocate(capacity: data.count) defer { bytes.deallocate data.count) return UnsafeRawPointer(bytes).assumingMemoryBound(to: CChar.self) } } extension UnsafeMutablePointer = UnsafeMutablePointer(mutating: self) let cBuffer = UnsafeMutableRawPointer.init(unsafeMutablePointer
<T>>.size //8
MemoryLayout<unsafeMutablePointer<T>>.alignment //8
MemoryLayout<unsafeMutablePointer unsafePointer
unsafePointer<T> 等同于 const T *.
unsafeMutablePointer
unsafeMutablePointer<T> 等同于 T *
unsafeRawPointer
指针 Swift的指针分类两类: typed pointer指定类型指针:unsafePointer<T>,unsafeMutablePointer<T> raw pointer未指定类型指针:unsafeRawPointer ,unsafeMutableRawPointer Swift指针与OC指针类比 Swift OC unsafePointer<T> const T * 指定类型指针与指针内存都不可变 unsafeMutablePointer 实例二: var age : Int = 18 //创建、获取可变类型指针 let typeMutablePtr = withUnsafeMutablePointer(to: &age) {ptr -> UnsafeMutablePointer return ptr } print(age) print(typeMutablePtr.pointee) 输出结果 通过修改变量指针指向的值,来修改变量的值 实例三 //初始化 let ptr = UnsafeMutablePointer bindMemory: 将 UnsafeMutableRawPointer 指针类型更改为 UnsafeMutablePointer<Hr_HeapObject> assumingMemoryBound
scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer
Swift import SwiftShims struct Test { init() } // main sil [ossa] @main : $@convention(c) (Int32, UnsafeMutablePointer <Optional<UnsafeMutablePointer<Int8>>>) -> Int32 { bb0(%0 : $Int32, %1 : $UnsafeMutablePointer<Optional <UnsafeMutablePointer<Int8>>>): %2 = integer_literal $Builtin.Int32, 0 // user: %3 %3 = <Optional<UnsafeMutablePointer<Int8>>>) -> Int32 { bb0(%0 : $Int32, %1 : $UnsafeMutablePointer<Optional <UnsafeMutablePointer<Int8>>>): %2 = integer_literal $Builtin.Int32, 0 // user: %3 %3 =
count: Int(dataLength) + 8) let bufferPointer = bufferData.withUnsafeMutableBytes { (bytes: UnsafeMutablePointer <UInt8>) -> UnsafeMutablePointer<UInt8> in return bytes } let bufferLength
sil_global hidden @main.object2 : main.YRTeach : $YRTeach // main sil @main : $@convention(c) (Int32, UnsafeMutablePointer <Optional<UnsafeMutablePointer<Int8>>>) -> Int32 { bb0(%0 : $Int32, %1 : $UnsafeMutablePointer<Optional <UnsafeMutablePointer<Int8>>>): alloc_global @main.object1 : main.YRProtocol // id: %2 %3 = global_addr
将Uint8 (ios的byte)转成c语言用的char[]数组指针,(可能有更好的转换方法,但是此方法也可行) var pointer = UnsafeMutablePointer<UInt8>.allocate 用C语言加密后 获取到指针,将指针转换成ios平台的Data //加密结果接收的指针 let resoultPointer = UnsafeMutablePointer<UInt8>.allocate(
>, outFreeFunc: UnsafeMutablePointer<NameFreeFunc? >, outFreeFunc: UnsafeMutablePointer<NameFreeFunc? >, outFreeFunc: UnsafeMutablePointer<NameFreeFunc? >, // outFreeFunc: UnsafeMutablePointer<NameFreeFunc? 仿写代码如下: struct StructMetadata{ var kind: Int var Descriptor: UnsafeMutablePointer<StructDescriptor
Swift import SwiftShims func getSize() -> Int // main sil [ossa] @main : $@convention(c) (Int32, UnsafeMutablePointer <Optional<UnsafeMutablePointer<Int8>>>) -> Int32 { bb0(%0 : $Int32, %1 : $UnsafeMutablePointer<Optional <UnsafeMutablePointer<Int8>>>): %2 = integer_literal $Builtin.Int32, 0 // user: %3 %3 =
inInputDataProc: AudioConverterComplexInputDataProc, inInputDataProcUserData: UnsafeMutablePointer , ioOutputDataPacketSize: UnsafeMutablePointer<UInt32>, outOutputData: UnsafeMutablePointer
runningTotal } return incrementer } let makeInc = VoidIntFun(f: makeIncrementer()) let ptr = UnsafeMutablePointer
inInputDataProc: AudioConverterComplexInputDataProc, inInputDataProcUserData: UnsafeMutablePointer , ioOutputDataPacketSize: UnsafeMutablePointer<UInt32>, outOutputData: UnsafeMutablePointer
生成图片的指定时间 * actualTime: 生成图片的精确时间 */ open func copyCGImage(at requestedTime: CMTime, actualTime: UnsafeMutablePointer
UnsafeMutablePointer 系列中的类型通常需要手动管理内存分配,包括管理其初始化状态。但是,并非该系列中的每个相关类型都具有一定的功能来管理内存的初始化状态。 分配后涉及的状态如下: 没有绑定和没有初始化(从 UnsafeMutableRawPointer.allocate() 返回) 绑定到类型,没有初始化(从 UnsafeMutablePointer<T> 我们打算完善该系列中每个相关成员的初始化功能:UnsafeMutablePointer、UnsafeMutableRawPointer、UnsafeMutableBufferPointer、UnsafeMutableRawBufferPointer
首先会判断传入的值是否是在数组的索引范围之内,接着会通过firstElementAddress获取到第一个元素的指针 UnsafeMutablePointer的下标操作 ? Array的下标操作最终会转到Buffer的getElement方法,Buffer的getElement方法又会转到UnsafeMutablePointer的下标操作,UnsafeMutablePointer
Person { func drink() } // 使用sil指令定义一个名为main的函数,程序的入口点 // main sil @main: $@convention(c) (Int32, UnsafeMutablePointer <Optional<UnsafeMutablePointer<Int8>>>) -> Int32 { // 定义基本块bb0,它接受两个参数,一个是Int32,另一个是UnsafeMutablePointer <Optional<UnsafeMutablePointer<Int8>>> bb0(%0: $Int32, %1: $UnsafeMutablePointer<Optional<UnsafeMutablePointer
compressionSessionOut: UnsafeMutablePointer<VTCompressionSession> //compression session的返回值。 infoFlagsOut: UnsafeMutablePointer<VTEncodeInfoFlags> //不知道啥作用 ) -> OSStatus //返回的状态值 参数详细介绍: session
static let runOnce: Void = { let typeCount = Int(objc_getClassList(nil, 0)) let types = UnsafeMutablePointer