0

我想为我的所有课程添加功能和另一个属性。


所以我写了一个分类:

@implementation NSObject (MyCategory)

我在其中声明了一个静态属性:

static MyObj myObj;

我创建了 2 个类方法来获取和设置它:

+ (MyObj) getMyObj {
    return myObj;
}

+ (void) setMyObj:(MyObj)obj {
    myObj = obj;
}

现在我在我的 .pch 文件中导入了 NSObject+MyCategory.h,所以所有的类都会受此影响。事实上,所有类现在都有新的功能和状态:

#import "NSObject+MyCategory.h"

问题是当我设置 myObj 时,它会更改所有类的 myObj。所有类共享 1 个 myObj。

我希望每个类都有自己的 myObj,它是使用该类别添加的。我不想要一个 myObj,而是想要与类一样多的 myObj。每个类都应该有自己的 myObj。

谢谢,努尔

4

2 回答 2

2

您不能将属性实例变量添加到类别中的类。子类 NSObject 或使用关联对象

于 2012-11-05T17:14:32.160 回答
0

您的解决方案添加了一个静态变量(不是“属性”,在 Objective-C 中意味着别的东西),没有办法使用类别为每个类添加一个静态变量。

但是,您的想法与适合您的想法很接近;如果您只能拥有一个变量并且想要存储多个值,您可以使用什么?一本字典。

static NSMutableDictionary *References;

+ (void) load
{
   // load is called exactly once when this category is first loaded,
   // setup the dictionary
   References = [NSMutableDictionary new];
}

+ (void) setMyObj:(MyObj)reference
{
   // NSMutableDictionary will take any object reference as a key,
   // for a class method self is a reference to the unique class object,
   // so use self as the key and store the reference
   [References setObject:reference forKey:self];
}

+ (MyObj) getMyObj
{
   // returns previously stored reference or nil if there isn't one for this class
   return [References objectForKey:self];
}

高温高压

于 2012-11-05T18:23:41.507 回答