如何从另一个类中获取关联对象
我的代码是:
#import <UIKit/UIKit.h>
static char NUMBER ='a';
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@end
@implementation Person
- (instancetype)init
{
self = [super init];
if (self) {
NSNumber *num=@10;
objc_setAssociatedObject(self, &NUMBER, num, OBJC_ASSOCIATION_RETAIN);
}
return self;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
Person *p=[[Person alloc]init];
NSNumber *num=objc_getAssociatedObject(p, &NUMBER);
NSLog(@"%@",num);
}
@end
NSLog(@"%@",num)
为空。
为什么我无法从上面的代码中获取关联的对象。我们不能从另一个类中获取相关对象吗?谢谢!
答案 0 :(得分:2)
问题在于你的钥匙。您可能在不同的文件中定义此类。不要使用static
关键字,静态变量只能在单个翻译单元中访问。这意味着您为每个文件提供了NUMBER
的新副本。删除static
关键字并在Person.h标题中添加extern
声明:
Person.h:
extern const char NUMBER;
@interface Person : NSObject
@end
Person.m:
#import "Person.h"
#import "objc/runtime.h"
const char NUMBER ='a';
@implementation Person
- (instancetype)init
{
self = [super init];
if (self) {
NSNumber *num = @10;
objc_setAssociatedObject(self, &NUMBER, num, OBJC_ASSOCIATION_RETAIN);
}
return self;
}
@end
ViewController.m:
#import "Person.h"
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
Person *p = [[Person alloc]init];
NSNumber *num = objc_getAssociatedObject(p, &NUMBER);
NSLog(@"%@",num);
}
@end