在objc_SetAssociatedObject中使用非id指针作为值是否可以?

Chr*_*eux 3 cocoa objective-c objective-c-runtime

正如标题所说.如果我这样做,没有立即出错:

- (void) associateSelector:(SEL)value withPointer:(void*)key
{
    objc_SetAssociatedObject(self, key, (id) value, OBJC_ASSOCIATION_ASSIGN);
}
Run Code Online (Sandbox Code Playgroud)

是否有充分理由谨慎使用它?

Yuj*_*uji 6

您以文档未明确支持的方式使用API​​.因此,在下次更新OS X/iOS时,您不能抱怨.这是谨慎的一个原因.

文档说明OBJC_ASSOCIATION_ASIGN设置了一个弱引用.这意味着垃圾收集情况下的重要事情,所以要小心.

如果有办法以官方支持的方式做事,我宁愿这样做.在您的情况下,使用NSStringFromSelector会立即支持您的代码.