- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想设置n
Swift 中一个对象的关联对象数量
我的理解是UnsafeRawPointer
的通常模式引用是这样的...
static var reference = "someRef"
public func add(to myObject: AnyObject) {
let adding = ThingToAdd()
objc_setAssociatedObject(myObject, &reference, adding, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
}
但这不适用于 n
调用add(to:)
的次数
类似地,如果我只在 myObject
调用一次,下面的代码就可以正常工作。 ..但是,如果我以相同的方式添加另一个关联对象...它将替换第一个 ThingToAdd
与第二个。内联构建唯一的字符串不起作用。在模拟器上没问题,但在设备上则不然。
public func add(to myObject: AnyObject) {
let adding = ThingToAdd()
var reference = "objectref\(UUID().uuidString)".replacingOccurrences(of: "-", with: "")
objc_setAssociatedObject(myObject, reference, adding, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
}
我知道这是不正确的,但我不知道如何创建 n
数量UnsafeRawPointers
为了存储具有唯一引用的关联对象。
任何帮助/解释将不胜感激。
最佳答案
将引用
传递给objc_setAssociatedObject
的key: UnsafeRawPointer
参数将变量存储的地址传递给该参数功能。
保证全局变量和静态成员变量(并且只有这些变量)具有固定地址。
在您的第一个版本中,使用相同键对 objc_setAssociatedObject
的第二次调用和所有后续调用都会替换以前的关联。
在您的第二个版本中,局部变量的地址作为键传递。该地址在后续调用中可能相同,也可能不同。请注意,字符串的内容无关紧要,键只是一个指针,即该变量的地址。
如果您需要将可变数量的值与给定对象关联,那么我建议关联单个NSMutableArray
(或NSMutableDictionary
)并将值添加到该数组或字典中。
关于objective-c - 了解 objc_setAssociatedObject 中的 UnsafeRawPointer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59694324/
我只想调用C函数 static inline uint64_t wyhash(const void* key, uint64_t len, uint64_t seed) 像这样来自 Swi
谁能解释一下 UnsafeRawPointer.assumimgMemoryBound(to:) 和 UnsafeRawPointer.bindMemory(to:capacity:) 有什么区别?
我想设置n Swift 中一个对象的关联对象数量 我的理解是UnsafeRawPointer的通常模式引用是这样的... static var reference = "someRef" public
下面的代码可以在 Swift Playground 中运行: import UIKit func aaa(_ key: UnsafeRawPointer!, _ value: Any! = nil)
我正在尝试执行 https 请求,但是当我尝试匹配本地和远程 ssl 证书时,Xcode 向我显示了上述错误。我在下面附上了一张错误图片和代码,如果有任何帮助,我们将不胜感激。 下面是URLSessi
我正在尝试获取设备 token 。 首先,这个值是独一无二的吗? 我承认它是一种独特的值(value),并努力获得它。我正在按照获取设备 token 的方式看到错误。 func applica
我是 UnsafeRawPointer 的新手。正如我所得到的,我需要在我的扩展中分配不安全的内存,并将指针发送到我的应用程序,在那里必须强制转换和释放它。下面是我想要做的草图。我想从 Safari
我正在研究带位置的相机。 我正在做的是当单击捕获图像按钮时,我将所有位置信息收集在字典中并进一步将其设置在 CFDictionarySetValue 中。这是我面临的问题。 CFDictionaryS
我在使用 MDQuery 浏览 Swift 3 中的 Spotlight 搜索结果时遇到了问题。我希望 MDQueryGetResultAtIndex 产生一个 MDItem,在 C/Objectiv
这是我在以前版本的 Swift 中的可行代码: let imageOptionsDictKeys = [ kCVPixelBufferPixelFormatTypeKey, kCVPixelBuff
根据 Swift 3 中 Data 的文档,我可以使用一个初始化程序从 UnsafeRawPointer 创建 Data。我需要的实际上是相反的。我有一个数据,我想创建一个指向数据字节的 Unsafe
IOHIDDeviceSetReport 方法不接受 UnsafeRawPointer 类型方法签名是: IOHIDDeviceSetReport(, , , ##UnsafePointer#>, )
我正在将一个 swift 2.3 项目更新到 3.1,我在转换这个函数时遇到了问题,特别是在一行中。 这是数据的扩展。 public func read(offset f_offset: inout
我有一个 UITableView。当点击一个单元格时,我的应用程序会生成相关图像。图像生成是在后台线程上完成的,因为一些图像需要相当长的时间来渲染。渲染图像后,将在主线程上调用 UIImageWrit
我正在尝试传递 Data? 中包含的字节到 C 函数。 C 函数声明如下: void func(const void *buffer); 我的 Swift 看起来像: myData?.withUnsa
我们有一个跨平台图像处理库,有一个调用将 CGImageRef 作为 UnsafeRawPointer 返回,我需要将其转换为 CGImage。我知道调用在 objective-c 中使用它时的工作方
无法将 Void 类型的值(又名“()”)转换为预期的参数类型“unsafeRawPointer” 代码允许我通过触摸在屏幕上画线。我正在使用字典来允许多个用户同时绘制多条线。 就在我试图将指针存储在
我想从字符串中生成 CRC32 哈希,所以我得到了 zlib 函数 crc32。 但在 Swift 3 中,这会产生问题。 代码如下所示: func crc32HashString(_ string:
我是一名优秀的程序员,十分优秀!