面试题答案
一键面试- 添加属性声明:
在类别头文件中声明属性
name
:
#import <Foundation/Foundation.h>
@interface NSObject (MyCategory)
@property (nonatomic, strong) NSString *name;
@end
- 实现存取方法: 在类别实现文件中,通过关联对象来实现存取方法:
#import "NSObject+MyCategory.h"
#import <objc/runtime.h>
static const char *kNameKey = "kNameKey";
@implementation NSObject (MyCategory)
- (void)setName:(NSString *)name {
objc_setAssociatedObject(self, kNameKey, name, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
- (NSString *)name {
return objc_getAssociatedObject(self, kNameKey);
}
@end
在上述代码中:
static const char *kNameKey = "kNameKey";
定义了一个静态常量作为关联对象的键。setName:
方法使用objc_setAssociatedObject
函数来设置关联对象,其中OBJC_ASSOCIATION_RETAIN_NONATOMIC
表示使用非原子性的强引用。name
方法使用objc_getAssociatedObject
函数来获取关联对象。