2012-02-14 13 views
0

可能性の重複:私はここで何か間違ったことしなければならない
Why is object not dealloc'ed when using ARC + NSZombieEnabled自動リファレンスカウント動作していない

。コンパイラはApple LLVM Compiler 3.0に設定され、Objective-C自動参照カウントはYESに設定されます。また、ARCを有効にする必要がある第三者ソフトウェアも含まれています。

私の基本的な問題は、私のプロパティが解放されないということです。私は、次のヘッダーがあります。

@interface ArchiveController : UIViewController <CloseSubviewDelegate> { 
    NSArray *journals; 
    NSMutableArray *archiveViews; 
} 

@property (nonatomic, strong) NSArray *journals; 
@property (nonatomic, strong) NSMutableArray *archiveViews; 

.... 

@end 

私はそれらを合成し、このようarchiveViewsの配列を初期化:

self.archiveViews = [NSMutableArray array]; 

後、私はそれにオブジェクトを追加し、すべてが正常に動作します。ジャーナル配列と同じです。

私はArchiveControllerがリリースされることを確認するためにdeallocメソッドを追加しました:

-(void)dealloc 
{ 
    DLog(@"dealloc archive controller"); 
} 

動作しますが、配列は決して解放されています。どうして? deallocメソッドを次のように変更した場合:

-(void)dealloc 
{ 
    DLog(@"dealloc archive controller"); 
    self.archiveViews = nil; 
} 

すべてが正常に動作しますが、正しくはありません。私はアレイとそのオブジェクトが他の場所では参照されないことを100%確信しています。

プリプロセッサはすべてのretain/release/deallocの挿入を処理するはずですか? Xcodeで前処理された出力を生成させると、何も変わっていないようです!

+0

配列が解放されていないことをどうやって知っていますか? –

+0

ビルドフェーズエリアにファイルごとのコンパイルフラグを追加することで、ファイルごとにARCをオフにすることができます。恐らくそれはここには当てはまりませんが、二重チェックの価値があるかもしれません。これをオフにするフラグは '-fno-objc-arc'です。 –

+0

です。これは、配列内のオブジェクトが決して解放されないためです。 Thx Kevinは気付いていますが、そうではありません。 – cboe

答えて

0

私は循環的な依存関係を疑う。

インストゥルメントを使用すると、それらを特定する際に役立ちます。

+0

ここで保持サイクルがあった場合、 '-dealloc'はまったく呼び出されません。これは' self.archiveViews = nil; 'が決して実行されないことを意味します。 –

関連する問題