参数对于 UnsafeMutablePointer<Type>.alloc() 有啥意义?

Posted

技术标签:

【中文标题】参数对于 UnsafeMutablePointer<Type>.alloc() 有啥意义?【英文标题】:What meaning does the parameter have for UnsafeMutablePointer<Type>.alloc()?参数对于 UnsafeMutablePointer<Type>.alloc() 有什么意义? 【发布时间】:2015-02-12 14:44:15 【问题描述】:

假设我想在 Swift 中创建一个指向Int指针。从我所见,我会做this:

let pointer = UnsafeMutablePointer<Int>.alloc(1)
pointer.memory = 100
println(pointer)        //prints 0x00007f8672fb7eb0
println(pointer.memory) //prints 100

现在,当我调用UnsafeMutablePointer&lt;Int&gt;.alloc(1) 时,1 表示什么?我假设它是从指针地址开始在内存中分配的Ints 的数量。 所以1 将分配 8 个字节2 将分配 16 个字节,依此类推... 这是真的吗?

如果是这样,Swift 使用 generic 类型为UnsafeMutablePointer&lt;Type&gt;s 分配了多少内存?

【问题讨论】:

【参考方案1】:

现在,当我打电话给UnsafeMutablePointer&lt;Int&gt;.alloc(1) 时,1 是什么意思 表示?我假设它在内存中分配的 Ints 数量开始 从指针地址。

这是分配内存的项目数。

所以 1 将分配 8 个字节,2 将分配 16 个字节,依此类推... 这是真的吗?

几乎。一个Int 可以是 4 或 8 字节,具体取决于 架构。

如果是这样,Swift 分配了多少内存 UnsafeMutablePointer&lt;Type&gt; 使用泛型类型?

您不能为泛型类型分配内存。在那个点 alloc()被调用,类型参数T必须是已知的,要么给定 明确地或从上下文推断。

【讨论】:

以上是关于参数对于 UnsafeMutablePointer<Type>.alloc() 有啥意义?的主要内容,如果未能解决你的问题,请参考以下文章

Swift:无法将“UnsafeMutablePointer”类型的值转换为预期的参数类型“UnsafeMutablePointer”

swift3.0 无法将类型“[UnsafeMutablePointer<Int8>]”的值转换为预期的参数类型“UnsafeMutablePointer<Int8>?”

在 Swift 中使用带有 UnsafeMutableRawPointer 或 UnsafeMutablePointer 参数的 ObjC 函数?

无法转换“CGPoint!”类型的值到预期的参数类型'UnsafeMutablePointer<CGPoint>'

无法使用类型为“((AnyObject!,NSInteger,UnsafeMutablePointer<ObjCBool​​>)->())”的参数列表调用“enumerateObje

Swift 转换:错误 - UnsafeMutablePointer