我正在尝试在objc_setAssociatedObject中使用密钥,如下所示:
How do I use objc_setAssociatedObject/objc_getAssociatedObject inside an object?
我有一个定义的MyConstants.h文件
static NSString *myConstant = @"MyConstant";
然后,此文件通过MyFramework.h包含在MyFramework中
#import ...; #import "MyConstants.h" #import ...;
然后在我的项目中,框架通过.pch标头包含在所有文件中.
#import <Cocoa/Cocoa.h> #import <MyFramework/MyFramework.h>
这一切都按预期工作.问题是当我用myConstant作为键调用objc_setAssociatedObject或objc_getAssociatedObject时,它不起作用.原因很明显,从日志中可以看出:
- (void)doSomething:(id)key { //Gets called with myConstant NSLog(@"Associating with key at %p",&key); objc_setAssociatedObject(self,&key,object,policy); } - (void)doSomethingElse:(id)key { //Gets called with myConstant NSLog(@"Seeking association for key at %p",&key); NSLog(@"Will find %@",objc_getAssociatedObject(self,&key)); }
哪些日志:
Associating with key at 0x7fff5fbfecdf Seeking association for key at 0x7fff5fbfecef Will find (null)
你会注意到指针移动了.
但是,再次调用相同的方法会显示相同的指针.就像常量IS是一个常量,在导入它的文件中,但不是整个项目.
问:如何正确定义和导入包含常量的标题,以便常量实际上在内存中的常量位置?