Ich machte eine Unterklasse von NSCell und überschrieb die SetObjectValue-Funktion, um meine Notwendigkeit zu erreichen. Die Dinge sind in Ordnung, außer es gibt ein Leck Problem. Die SetObjectValue-Funktion von NSCell scheint das ursprüngliche Objekt nicht freizugeben.Kakao benutzerdefinierte Zelle in NSTableView: NSCell Subclassing Leck
Das Objekt ich die Klasse geben, ist ein customize Objekt, das mit dem NSCopying Protokoll entsprechen und implementiert, um die copyWithZone Funktion wie unten
- (void)setObjectValue:(id <NSCopying>)object {
// I tried to use [[self objectValue] release]; here but the app crashed
[super setObjectValue:object];
//---- other iniatizlize here ---
}
.
- (id)copyWithZone:(NSZone *)zone {
MapComponent *newCopy = [[MapComponent allocWithZone:zone] initWithType:self.componentType];
newCopy.myImage = self.myImage;
return newCopy;
}
Ich habe das gleiche Problem here gefunden. Es gibt keine Antwort, aber vielleicht beschreibe ich meine Situation besser.
Sie sollten keine 'autorelease' Wert aus einer Kopiermethode zurückzukehren! – Richard
Ein weiteres Problem hier ist, dass Sie den Accessor 'newCopy.myImage' verwenden, der anfänglich den gleichen ** Zeiger-Wert ** hat' self.myImage'. Was Sie tun möchten, ist der direkte Zeigerzugriff: 'newCopy-> myImage = nil; newCopy.myImage = self.myImage; 'Andernfalls wird' newCopy' 'self'' myImage' freigeben, wenn es versucht, eine Kopie davon zu erstellen. – Richard