0

すべてのクラスに機能と別のプロパティを追加したいと考えています。


だから私はカテゴリーを書きました:

@implementation NSObject (MyCategory)

そして、その中で静的プロパティを宣言しました:

static MyObj myObj;

そして、それを取得および設定するための 2 つのクラス メソッドを作成しました。

+ (MyObj) getMyObj {
    return myObj;
}

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

NSObject+MyCategory.h を .pch ファイルにインポートしたので、すべてのクラスが影響を受けます。実際、すべてのクラスに新しい機能と状態が追加されました。

#import "NSObject+MyCategory.h"

問題は、myObj を設定すると、すべてのクラスで myObj が変更されることです。すべてのクラスが 1 つの myObj を共有します。

各クラスには、カテゴリを使用して追加される独自の myObjが必要です。myObj は 1 つではなく、クラスと同じ数の myObj が必要です。各クラスには独自の myObj が必要です。

ありがとう、ヌール

4

2 に答える 2

2

プロパティインスタンス変数をカテゴリのクラスに追加することはできません。NSObject をサブクラス化するか、関連するオブジェクトを使用します。

于 2012-11-05T17:14:32.160 に答える
0

あなたのソリューションは単一の静的変数を追加します(Objective-Cでは「プロパティ」ではなく、何か他のものを意味します)。カテゴリを使用してクラスごとに静的変数を追加する方法はありません。

しかし、あなたのアイデアはあなたのために働くものに近いです。変数を1つだけ持つことができ、多くの値を格納したい場合は、何を使用できますか?辞書。

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];
}

HTH

于 2012-11-05T18:23:41.507 に答える