问题标签 [unsafemutablepointer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
237 浏览

swift - UnsafeMutablePointer.pointee 和 didSet 属性

在我创建的结构(在 Xcode 10.1、Swift 4.2 上)中观察到的属性上使用 UnsafeMutablePointer 时出现了一些意外行为。请参阅以下操场代码:

看起来,将 UnsafeMutablePointer 上的指针修改为观察到的属性实际上并没有修改该属性的值。此外,将指针分配给属性的动作会触发 didSet 动作。我在这里想念什么?

0 投票
2 回答
412 浏览

arrays - 创建 Swift 数组的最快方法具有固定计数

我注意到这一点:

比仅仅花费更多的时间

但是,不安全指针使用起来不太方便,可能需要创建一个Array<Float>以传递给其他代码。

但是这样做绝对会杀死它,并且只创建Array填充零的值会更快。

任何想法如何创建一个Array更快,同时,有一个实际的Array<Float>方便?在我的项目的上下文中,我可能可以在内部处理 unsafe 指针,并Array仅在模块外部需要时将其包装起来。

快速测试这篇文章中的所有答案:

结果:(在 1000 万次浮点数上)

数组创建:9.256 毫秒

array.create 更快:0.004 毫秒

Array.reserveCapacity ?: 0.264 毫秒

连续阵列?:10.154 毫秒

ContiguousArray.reserveCapacity:3.251 毫秒

UnsafeMutableBufferPointer BaseMath:0.049 毫秒

我正在以发布模式在 iphone 模拟器上临时运行应用程序。我知道我可能应该在命令行/独立中执行此操作,但是由于我打算将其编写为应用程序的一部分,所以这可能没问题。

对于我尝试做的事情,UnsafeMutableBufferPointer 看起来很棒,但是您必须使用 BaseMath 及其所有一致性。如果您追求更一般或其他背景。请务必阅读所有内容并确定哪一个适合您。

0 投票
1 回答
899 浏览

ios - 如何获取 UnsafeMutablePointer 的长度 written to a OpenSSL BIO in Swift?

I'm working with OpenSSL and therefore am having to work with some UnsafeMutablePointer objects.

I'm running the following code



I'm working with OpenSSL and therefore am having to work with some UnsafeMutablePointer objects.

I'm running the following code

The above code converts an OpenSSL X509_REQ object into a DER using the OpenSSL method i2d_X509_REQ_bio. The problem I'm having is the BIO_read command and the UnsafeMutablePointer storage object both need a size count for the number of bytes. Does anybody know the correct way to get the length of bytes of an object pointed to by a UnsafeMutablePointer<Any> in Swift? (I'm hard-coding an arbitrary number right now, 3000, which is very bad) The X509_Req object doesn't have any size or count helper methods on it, and digging into Apple's documentation I'm not seeing a clear way to find the length of an object at a pointer.


Why don't these daemon threads get killed?

I was learning about sharing data between threads and I stumbled upon this different problem. As far as I understand, daemon threads are killed upon completion of main thread. The simple code is below:

I'm starting 6 threads and this is my output in IDLE python 3.7.2:

So, as you can see the threads continue to run after the main thread even if they are deamonic. One interesting thing I discovered is that they dont print anything after "Main thread end" if they are run from windows cmd instead of IDLE.

Does anyone know what is happening here?

Thanks :)

0 投票
1 回答
40 浏览

swift - 将 UnsafeMutablePointer 的实部提取为浮点数并将其存储在数组中

我有这个功能

这个电话

我想通过枚举arrayComplex并将实部提取到常规数组中,例如

线

是不正确的。

item是一个UnsafeMutablePointer<Float>

看在上帝的份上,我该怎么做?

谢谢。

========================

这是output

0 投票
1 回答
81 浏览

c - Swift 可变指针被覆盖

所以我有一些代码可以对 2 个图像进行深度检测。深度检测发生在本机 C 代码中。为了调用 C 库,我有另一个函数来构建我作为参数传入的 Int16 数组。

但是,当我直接在 C 调用的参数中进行函数调用时,它会覆盖第一个函数调用并两次传入相同的参数。

这就是我的意思,这是我对 C 库的调用:

获取面部详细信息调用如下所示:

我得到了这个扩展的可变指针:

所以当我运行上面的ImageProcessing.depthDetection调用时,我可以看到打印出来的我的leftFacerightFace数组确实不同,看起来像这样:

但是当我在 C 中将它们打印出来时,它们都是相同的rightFace数组并且看起来像这样(我正在以不同的方式格式化我的 C 日志,但你可以看出左右都有相同的数据):

那么为什么第一个getFaceDetails输出会被第二个输出覆盖呢?

最奇怪的部分是,如果我将结果分配getFaceDetails给一个变量,然后像我在这里所做的那样将该变量作为参数传递:

然后突然之间它起作用了!我在 C 中的打印语句显示左右脸的不同数据。只有当我直接在参数中传递函数调用时,它才有错误的数据。

那么这里发生了什么?为什么我这样做的第一种方法不会产生与后者相同的结果?

0 投票
2 回答
70 浏览

arrays - 无需复制或分配的 Swift 数组类型之间的转换

我想访问一个现有的 UInt64 数组,就好像它是一个 Int8 数组一样。关键要求是效率——我不想复制或重新分配数据,只想直接访问。我不想要副作用(例如,我希望在执行此代码块后能够继续使用 uint64Array,正在阅读有关重新绑定具有未定义副作用的信息。)

我尝试使用 Swift 4.2 执行此操作:

但是,我在运行时在以下行出现致命错误:

这是正确的方法吗?如果是这样,为什么我会收到致命错误?

0 投票
1 回答
128 浏览

ios - 快速将值输出到 typedef 指针

我几乎可以肯定这个标题是不正确的,但这里......

我正在桥接一个 Objective-C 类来设置 typedef。桥已建立,我能够正确声明 typedef var。

在 Objective-C 中,我还从同一个类中调用了一个方法,该方法在被调用时会向变量 TestHandle 输出一个值。

当我使用 Swift 5 尝试此操作时,出现此错误:

任何指针?

0 投票
1 回答
416 浏览

c - 如何访问映射到 swift 结构的内存缓冲区?

这对你来说可能是微不足道的,但我是 Swift 的新手,我找不到答案。我使用 C 代码从 TCP/IP 转换数据,一切正常。但是当我尝试将数据发送回 Swift 时,我收到错误消息:“UnsafeMutablePointer”类型的值没有成员“x”(在编译时)。

简而言之,我的 C 代码生成了一个结构,我希望我的 swift 代码可以读取该结构并使用该结构来访问字段。注意:我不想复制数据(这里的示例很简单,但我处理的是 MB(GB)。

0 投票
2 回答
280 浏览

swift - Swift 5 Conversion UnsafeBufferPointer 的这些内存功能是否相同

我正在对我不太理解的代码进行一些 Swift 5 转换,即以前开发人员的遗留代码。我得到:

'withUnsafeBytes' 已弃用:改用 withUnsafeBytes(_: (UnsafeRawBufferPointer) throws -> R) rethrows -> R`

为了:

我想用这个替换它,但我不确定它是否做同样的事情:

在这两个 fxs 的上下文中使用:

0 投票
1 回答
183 浏览

ios - 将浮点数数组转换为 UnsafeMutablePointer>

我需要使用一个UnsafeMutablePointer<UnsafeMutablePointer<Float>?>!用作参数的函数。它是在 Objective-C++ 框架中编写的,我通过桥接头访问它:

我在理解 args 参数的结构时遇到了一些麻烦,即float**. 在 Swift 中,它要求一个 type 的参数,UnsafeMutablePointer<UnsafeMutablePointer<Float>>我猜它指向一个浮点数组。

如果我创建一个浮点数组数组,我如何使用它来指向它,UnsafeMutablePointer<UnsafeMutablePointer<Float>>以便我可以将它传递给 C++ 函数?