2010-10-06 18 views
7

Sınıf B ve C sınıfı için süper sınıf olan A Sınıfı var. Sınıf A nesnelerini Sınıf A'da tanımlanan 'statik' NSMutablearray içine kaydetmem gerekiyor. Sınıftaki yöntemleri kullanarak MSMutableArray'da depolanan verileri değiştirmek mümkün müdür B ve C sınıfı mı? Statik dizi nasıl oluşturulur ve başlatılır? Bir örnek daha fazla yardımcı olacaktır. şimdiden teşekkürler.Nesne c'de bir sınıfta Statik NSMutableArray nasıl oluşturulur?

cevap

14

İşte bunu yapmanın bir yolu.

@interface ClassA : NSObject 
{ 
} 

-(NSMutableArray*) myStaticArray; 

@end 

@implementation ClassA 

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

@end 

Bu, gerçek single'lar yerine oldukça çok kullandığım bir model. ClassA ve alt sınıflarından nesneler bu gibi kullanabilirsiniz:

[[self myStaticArray] addObject: foo]; 

Eğer örneğin düşünebilirsiniz varyasyonları vardır Yöntemi bir sınıf yöntemi haline getirebilirsiniz. Ayrıca, çok iş parçacıklı bir ortamda yöntem iş parçacığı güvenli hale getirmek isteyebilirsiniz. Örneğin.

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

Bu ,Array için bir bellek sızıntısına neden olmaz mı? – tbag

+0

Hiç sızıntı yapmaz --Array statik dizi olarak tanımlanır, böylece bu nesneyi yalnızca bir kez başlatır. – deathhorse

+0

@JeremyP şimdi bunu buluyor. Sadece bunun için alkış demek istedim. Harika çözüm! –

İlgili konular