由于无法在Objective-C的类别中创建综合属性,因此我不知道如何优化以下代码:
@interface MyClass (Variant)
@property (nonatomic, strong) NSString *test;
@end
@implementation MyClass (Variant)
@dynamic test;
- (NSString *)test {
NSString *res;
//do a lot of stuff
return res;
}
@end
该测试方法被调用运行时多次,我做了很多的东西来计算结果。通常,使用综合属性时,我会在第一次调用该方法时将值存储在IVar _test中,然后下次再次返回此IVar。如何优化上面的代码?
@lorean的方法将起作用(注意:答案现在已删除),但是您只有一个存储插槽。因此,如果您想在多个实例上使用它,并让每个实例计算一个不同的值,则它将无法正常工作。
幸运的是,Objective-C运行时具有称为关联对象的东西,它可以完全满足您的需求:
#import <objc/runtime.h>
static void *MyClassResultKey;
@implementation MyClass
- (NSString *)test {
NSString *result = objc_getAssociatedObject(self, &MyClassResultKey);
if (result == nil) {
// do a lot of stuff
result = ...;
objc_setAssociatedObject(self, &MyClassResultKey, result, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
return result;
}
@end
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句