2010-11-22 13 views
0

NSCell'in bir alt sınıfını yaptım ve ihtiyacımın gerçekleşmesi için setObjectValue işlevini geçersiz kıldım. Bir sızıntı sorunu dışında bunlar gayet iyi. NSCell'in setObjectValue işlevi orijinal nesnesini serbest bırakmayacak gibi görünüyor.NSTableView'da kakao özel hücresi: NSCell alt sınıf sızıntısı

Dersim vermek nesne NSCopying Protokolüne uygun ve

- (void)setObjectValue:(id <NSCopying>)object { 

    // I tried to use [[self objectValue] release]; here but the app crashed 

    [super setObjectValue:object]; 

    //---- other iniatizlize here --- 
} 

aşağıda copyWithZone işlevini uygulanan bir özelleştir nesnesidir.

- (id)copyWithZone:(NSZone *)zone { 
    MapComponent *newCopy = [[MapComponent allocWithZone:zone] initWithType:self.componentType]; 
    newCopy.myImage = self.myImage; 
    return newCopy; 
} 

Aynı sorunu buldum here. Cevap yok ama benim durumumu daha iyi ifade edebilir.

cevap

2

bu deneyin:

- (id)copyWithZone:(NSZone *)zone { 
    MapComponent *newCopy = [[[MapComponent allocWithZone:zone] initWithType:self.componentType] autorelease]; 
    newCopy.myImage = self.myImage; 
    return newCopy; 
} 
+2

Bir kopya yöntemi kullanırken bir 'autorelease' değer döndürmek olmamalı! – Richard

+0

Burada bir başka sorun, başlangıçta aynı * işaretçi değerine sahip olan '' new.de.myImage' '' newCopy.myImage' erişimcisini kullanmanızdır. Ne yapmak istediğiniz doğrudan işaretçi erişimi: 'newCopy-> myImage = nil; newCopy.myImage = self.myImage; 'Aksi takdirde, 'newCopy' bir kopyasını oluşturmaya çalıştığında' 'myImage'' i serbest bırakacak. – Richard