2010-10-06 6 views
7

Mam klasy A, która jest super klasy zarówno dla klasy B i klasy C. Potrzebuję przechowywać obiekty klasy A w "statycznej" NSMutablearray zdefiniowanej w klasie A. Czy jest możliwa modyfikacja danych przechowywanych w MSMutableArray przy użyciu metod w klasie B i klasa C? Jak utworzyć i zainicjować macierz statyczną? Przykładem może być większa pomoc. z góry dziękuję.Jak utworzyć Static NSMutableArray w klasie w Objective c?

Odpowiedz

14

Oto jeden sposób, aby to zrobić.

@interface ClassA : NSObject 
{ 
} 

-(NSMutableArray*) myStaticArray; 

@end 

@implementation ClassA 

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

@end 

To jest wzór, którego używam dużo zamiast prawdziwych singletonów. Obiekty klasy A i jej podklasy mogą jej używać w następujący sposób:

[[self myStaticArray] addObject: foo]; 

Istnieją odmiany, które można rozważyć np. możesz uczynić metodę metodą klasową. Możesz również chcieć, aby metoda była bezpieczna w środowisku wielowątkowym. na przykład

-(NSMutableArray*) myStaticArray 
{ 
    static NSMutableArray* theArray = nil; 
    @synchronized([ClassA class]) 
    { 
     if (theArray == nil) 
     { 
      theArray = [[NSMutableArray alloc] init]; 
     } 
    } 
    return theArray; 
} 
+0

Czy to nie spowoduje wycieku pamięci dla lampy? – tbag

+0

To nie będzie przeciekać - tablica jest zdefiniowana jako tablica statyczna, więc obiekt ten zostanie utworzony tylko raz. – deathhorse

+0

@JeremyP tylko znajdując to teraz. Chciałem tylko powiedzieć okrzyki za to. Świetne rozwiązanie! –

Powiązane problemy