2010-11-22 1 views
0

NSCellのサブクラスを作成し、setObjectValue関数をオーバーライドして、need.Thingsはリークの問題がある以外は問題ありません。 NSCellのsetObjectValue関数は、元のオブジェクトを解放しないようです。 Iクラスを与えるNSTableViewのCocoaカスタムセル:NSCellのサブクラス化リーク

オブジェクトがNSCopyingプロトコルに準拠し、

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

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

    [super setObjectValue:object]; 

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

以下のようcopyWithZone機能を実現カスタマイズ対象です。

私は同じ問題を発見しましたhere。答えはありませんが、自分の状況をよりよく分かるかもしれません。

答えて

2

これを試してみてください:

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

あなたはコピー方法から 'autorelease'値を返すべきではありません! – Richard

+0

もう一つの問題は、最初に同じ**ポインタ値**に 'self.myImage'を持つアクセサの' newCopy.myImage'を使用していることです。あなたがしたいのは、直接ポインタへのアクセスです: 'newCopy-> myImage = nil; newCopy.myImage = self.myImage; 'それ以外の場合、' newImage'はコピーを作成しようとすると 'newImage'を' release 'します。 – Richard

関連する問題