Swift-UnsafePointer, UnsafeMutablePointer,AutoreleasingUnsafeMutablePointer

原创Blog,转载请注明出处
blog.csdn.net/hello_hwc

前言:写Swfit代码的时候经常会遇到各种各样的Pointer,有时候真的很混乱,这里整理一下。

对应C语言的指针

作为返回值,变量和函数参数

对于类

UnsafePointer

UnsafePointer作为函数参数,可以接受如下类型

  • nil 作为指向NULL的指针
  • UnsafePointer, UnsafeMutablePointer, 或者 AutoreleasingUnsafeMutablePointer,会自动进行转换
  • 一个in-out 类型的变量,传入的是地址,这里的in-out指的就是取地址符号&
  • [Type] Type类型的数组,传入的是数组开始的地址

举例:

unc testFunc(UnsafePointer<Int>){ }
var a = 10
var b:UnsafePointer<Int> = nil
var c = [1,2,3]

testFunc(nil)
testFunc(&a)
testFunc(b)
testFunc(c)

注意:

如果是UnsafePointer,那么可以接受任何类型的Type

UnsafeMutablePointer

UnsafeMutablePointer作为函数参数,可以传入

  • nil 作为指向NULL的指针
  • UnsafeMutablePointer类型的变量
  • 一个in-out 类型的变量,传入的是地址,这里的in-out指的就是取地址符号&
  • in-out [Type],传入的是数组开始的地址

举例

func testFunc(UnsafeMutablePointer<Int>){

}
var a = 10
var b:UnsafeMutablePointer<Int> = nil
var c = [1,2,3]

testFunc(nil)
testFunc(&a)
testFunc(b)
testFunc(&c)

AutoreleasingUnsafeMutablePointer

AutoreleasingUnsafeMutablePointer作为函数参数,可以传入

  • nil 作为指向NULL的指针
  • AutoreleasingUnsafeMutablePointer类型的变量
  • in-out变量(这里的操作是在一个临时的缓冲区上,操作完成后拷贝到这个变量)
    举例
func testFunc(x: AutoreleasingUnsafeMutablePointer<NSString?>) {
}
var a:NSString? = nil
var b:AutoreleasingUnsafeMutablePointer<NSString?> = nil

testFunc(nil)
testFunc(&a)
testFunc(b)

你可能感兴趣的:(swift,pointer,unsafe,mutable)