2011-11-27 16 views
0

私はクラスSomeClassを持っています。プロパティはコピーを使用しているときだけ奇妙なメモリ

@property(retain) SomeObject *SomeProperty; 

として宣言し、私はSomeClassのオブジェクトおよびそれ以降のリリースを割り当てると

@synthesize SomeProperty = SomeProperty_; 

として定義されているが

SomeProperty_ = [[SomeObject alloc] initWithSomething]; 

:そのinitに私のような行がたくさんありますそれらは、すべて正常に動作し、メモリリークはありません。私はSomeClassのオブジェクトをコピーし、後で

SomeProperty_ = [[SomeObject alloc] initWithSomething]; 

のように、すべての行をそれを解放するときしかし、楽器のメモリリークとしてマークされています。私はこれをたくさん使うとメモリの警告を受け、後でクラッシュするのでこれも正しいです。
しかしように私はdeallocという名前のメソッドを作成する場合:すべてが同様にコピーしていないメモリの警告または漏洩して結構です

-(void) dealloc 
{ 
    self.SomeProperty = nil; 

    [super dealloc]; 
} 


私はこれが原因で私のcopy実装であると思う:

-(id)copy 
{ 
    SomeClass *copy = [[SomeClass alloc] init]; 

    copy.SomeProperty.somePOD = self.SomeProperty.somePOD; 

    return copy; 
} 

どこに問題がありますか?カスタムなしで解決するにはどうすればいいですかdealloc

+0

あなたはiOSの 'copy'メソッドを壊していることは知っていますか? – Abizern

+0

@Abizern:私は何ですか?私はobjective-cでメソッドをコピーする意味があることを知っていますが、私がコピーのカスタム実装が必要な場合、これを行うことはできますか? – Dani

+0

[NSCopying](http://developer.apple.com)を見てください。com/library/ios /#documentation/Cocoa/Reference/Foundation/Protocols/NSCopying_Protocol/Reference/Reference.html)プロトコル – Abizern

答えて

0

私は考えることができる最初のものがある:
「しかし、私はコピーするとき:あなたのsomePODは(???)

限り@propertyとして設定し、あなたが言うときがいかに

工assの対象と後でそれを解放し、

SomeProperty_ = [[SomeObject alloc] initWithSomething]; などのすべての行が、私はこれをたくさん使用している場合、私は、メモリの警告以降のクラッシュを取得して、これも正しいです。楽器のメモリリークとしてマークされています。」

あなたはinitの方法で行われた電話番号を参照していますか? あなたがそうでない場合、この割り当ての前にその変数にあったセッターとオブジェクトをバイパスしているためです。

0

カスタムdeallocメソッドを使用するか、Automatic Reference Counting(ARC)を使用する必要があります。

[[SomeObject alloc] init...]を呼び出すと、新しいオブジェクトの所有権が取得されるため、オブジェクトを終了した時点でオブジェクトを解放する必要があります。 retain属性を使用してプロパティを宣言するため、self.SomePropertyをnilに設定するとリリースが更新されます。

SomeClassオブジェクトが終了するまでSomeObjectオブジェクトを所有する場合、deallocメソッドでこれを行います。 ARCを使用すると、deallocメソッドが生成されます。

関連する問題