为了账号安全,请及时绑定邮箱和手机立即绑定

目标-C:类别中的属性/实例变量

目标-C:类别中的属性/实例变量

jeck猫 2019-07-22 16:38:18
目标-C:类别中的属性/实例变量由于无法在Object-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中,并在下一次返回该值。如何优化上述代码?
查看完整描述

3 回答

?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

你只有一个存储槽。因此,如果您希望在多个实例上使用此方法,并让每个实例计算一个不同的值,它将无法工作。

幸运的是,Object-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


查看完整回答
反对 回复 2019-07-22
  • 3 回答
  • 0 关注
  • 562 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信