7

クラス B とクラス C の両方のスーパー クラスであるクラス A があります。クラス A で定義された「静的」NSMutablearray にクラス A のオブジェクトを格納する必要があります。クラス B のメソッドを使用して MSMutableArray に格納されたデータを変更することは可能ですか?クラスC?静的配列を作成して初期化する方法は? 例はより役立つでしょう。前もって感謝します。

4

1 に答える 1

16

ここにそれを行う1つの方法があります。

@interface ClassA : NSObject
{
}

-(NSMutableArray*) myStaticArray;

@end

@implementation ClassA

-(NSMutableArray*) myStaticArray
{
    static NSMutableArray* theArray = nil;
    if (theArray == nil)
    {
        theArray = [[NSMutableArray alloc] init];
    }
    return theArray;
}

@end

これは、真のシングルトンの代わりに私がよく使用するパターンです。ClassA とそのサブクラスのオブジェクトは、次のように使用できます。

[[self myStaticArray] addObject: foo];

考慮できるバリエーションがあります。たとえば、メソッドをクラス メソッドにすることができます。マルチスレッド環境でメソッドをスレッドセーフにすることもできます。例えば

-(NSMutableArray*) myStaticArray
{
    static NSMutableArray* theArray = nil;
    @synchronized([ClassA class])
    {
        if (theArray == nil)
        {
            theArray = [[NSMutableArray alloc] init];
        }
    }
    return theArray;
}
于 2010-10-06T13:00:42.283 に答える