2012-02-21 11 views
0

誰も私にこの方法が私にリークを与えている理由を教えてもらえますか?私は年齢のためにそれを見てきましたが、なぜ漏れているのか理解できません。漏れたオブジェクトはContactOperationsです。 EventTypeはMallocとReleaseです。私はinitが間違っていると思った?Objective-C Leak

問い合わせコントローラ

ContactOperations *contactOps = [[ContactOperations alloc] initWithDatabase:database]; 
if ([contactOps applicationIsOwner]) 
    [contactOps startOperations];  
[contactOps release]; 

インスツルメンツは、アロケーションは私にリークを与えていると言う...

接触操作

ContactOperations 
- (id)initWithDatabase:(Database*)aDatabase 
{ 
    if (self = [super init]) 
    { 
     database = [aDatabase retain]; 
     parameter = [[Parameter alloc] init]; 
     parameter.database = aDatabase; 
     //addressBook = ABAddressBookCreate(); 
    } 
    return(self); 
} 



-(void)dealloc 
{ 
    [database release]; 
    [parameter release]; 
    //CFRelease(addressBook); 
} 
+0

Xcodeの内部から静的解析を試みましたか? – trojanfoe

+0

' - [ContactOperations startOperations]'のどこかに 'contactOps'がありますか?それ以外に、あなたが投稿したコードには漏れはありません。 – Costique

+0

ばかげた質問:リリース後に 'contactOps'を' nil'に設定しても警告は出ますか?そうでない場合は、技術的には、あなたのコードから依然として到達可能な過剰解放されたインスタンスがあります。 – Monolo

答えて

5
-(void)dealloc 
{ 
    [database release]; 
    [parameter release]; 
    //CFRelease(addressBook); 
} 

あなたはを忘れてしまいました- (void) deallocの末尾にがあります。 ContactOperationsのスーパークラスのインスタンス変数をクリアするには、[super dealloc]に電話する必要があります。

+1

右。これはガベージコレクタの代わりに参照カウントを使用する場合に必要です。 – ArjunShankar

+0

私はとてもemabrassedと偉大なすべての1つです。私はこれで時間を無駄にしてしまった。 – JonWells