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?
7
A
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;
}
Bu ,Array için bir bellek sızıntısına neden olmaz mı? – tbag
Hiç sızıntı yapmaz --Array statik dizi olarak tanımlanır, böylece bu nesneyi yalnızca bir kez başlatır. – deathhorse
@JeremyP şimdi bunu buluyor. Sadece bunun için alkış demek istedim. Harika çözüm! –