2012-03-30 8 views
0

私はコードをちょっと整理していますが、メモリリークが発生しているかどうかわからない関数でいくつかの行が見つかりました。 私は何か考えていただければ幸いです。"コピー"属性を持つNSURLプロパティ。それは漏れていますか?

ありがとうございます!

次のコードでは、変数filepathはNSURLで、ファイル名はプロパティとして定義されたNSStringオブジェクトです。定義属性は "copy"に設定されています。ここで コードです:

-(BOOL)isEqual:(id)object 
{ 
    if (self == object) 
     return YES; 

    if (!object || ![object isKindOfClass:[self class]]) 
     return NO; 

    if (![[[self filepath] path] isEqual:[[object filepath] path]]) 
     return NO; 

    if (![[self filename] isEqualToString:[object filename]]) 
     return NO; 

    if (![[self filesize] isEqualToString:[object filesize]]) 
     return NO; 

    if (![[[self filepath ] absoluteURL] isEqual:[[object filepath] absoluteURL]]) 
     return NO; 

    if (!([[[self filepath ] absoluteURL ] isFileURL ] && [[[object filepath] absoluteURL ] isFileURL ])) 
     return NO; 

    return YES; 
} 

私の理解から、コピー属性を持つプロパティが1の保持カウントを持つオブジェクトを返します。これは、if文ごとにメモリリークが発生することを意味します。 これが正しいですか?

答えて

2

コードスニペットには、リークを示すものはありません。

コピーアトリビュートは、プロパティーを設定するときにオブジェクトのコピーを保持することを意味します()。コード内で(たとえそのプロパティのアクセサであっても)それを参照するだけでは、それをリークすることはできません。

一方、 'filepath'と 'filename'は、それらが含まれているオブジェクトの-deallocメソッドで解放する必要があります。それをしないと(参照カウントメモリモードを仮定すると)になり、リークが発生します。

+0

興味深い!だから、(readonly、copy)の設定はまったく役に立たないのですよね?私はもちろんdeallocメソッドでオブジェクトを解放します。ご回答有難うございます! – guitarflow

+0

@guitarflow Leaksモジュールを使用してInstrumentsからアプリケーションを実行しましたか? – trudyscousin

+0

私はそれを行うことができることを知っています。私のアプリケーションにはもう一度実行可能な作業が必要です;-)私はここで尋ねるのが最も簡単な方法でしょう。しかし、ヒントのおかげで! – guitarflow

関連する問題