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

目标-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中,并在下一次返回该值。如何优化上述代码?


jeck猫
浏览 563回答 3
3回答

拉风的咖菲猫

你只有一个存储槽。因此,如果您希望在多个实例上使用此方法,并让每个实例计算一个不同的值,它将无法工作。幸运的是,Object-C运行时有一个名为关联对象完全可以做你想做的事:#import&nbsp;<objc/runtime.h>static&nbsp;void&nbsp;*MyClassResultKey;@implementation&nbsp;MyClass-&nbsp;(NSString&nbsp;*)test&nbsp;{ &nbsp;&nbsp;NSString&nbsp;*result&nbsp;=&nbsp;objc_getAssociatedObject(self,&nbsp;&MyClassResultKey); &nbsp;&nbsp;if&nbsp;(result&nbsp;==&nbsp;nil)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;do&nbsp;a&nbsp;lot&nbsp;of&nbsp;stuff &nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;=&nbsp;...; &nbsp;&nbsp;&nbsp;&nbsp;objc_setAssociatedObject(self,&nbsp;&MyClassResultKey,&nbsp;result,&nbsp;OBJC_ASSOCIATION_RETAIN_NONATOMIC); &nbsp;&nbsp;} &nbsp;&nbsp;return&nbsp;result;}@end
打开App,查看更多内容
随时随地看视频慕课网APP