6

初めての iPhone アプリを完成させようとしていますが、Leaks Performance Tool を使って実行することにしました。明らかなものを 1 つ修正した後、私が残した唯一のものは、loadNibNamed を介してロードされたテーブル ヘッダー ビューとして機能する Nib を持つものです (私はここでレシピのデモに従っていました)。


- (void)viewDidLoad {
    [super viewDidLoad];

    if (self.tableHeaderView == nil) {
        [[NSBundle mainBundle] loadNibNamed:@"TableHeaderView" owner:self options:nil];
        self.tableView.tableHeaderView = self.tableHeaderView;
    }
}

次に、dealloc で:


- (void)dealloc {
    [tableHeaderView release];
    [super dealloc];
}

インスツルメントは、loadNibNamed の行から 2 つのリークがあり、256 バイトがリークしていることを教えてくれます。tableHeaderView は、Nib の唯一の最上位オブジェクトです (デバッガーで確認しました)。リリースするのを忘れているものはありますか? インスツルメンツが私に言っていることを誤解していますか? 違いますか?OSが後でクリーンアップするものですか?

4

2 に答える 2

4

nib をロードするときは、nib ファイル内のすべてのトップレベル オブジェクトを解放する必要があります。そのファイルには TableHeaderView 以外に何かありますか?

于 2009-11-01T11:34:40.567 に答える
2

インスツルメンツはシミュレータでのみこれを報告していますか、それとも実際のデバイスで同じことを報告していますか? デバイスで取得できない場合は、シミュレータです。これは、発生することが知られています (完全に一致するわけではありません)。

また、dealloc では、そうではありません[self.tableHeaderView release]か? 使用法に一貫性を持たせる必要があります。

混乱を避けるために、.h で次のように宣言します。

NS/UI/??xxxxxx *_MyObjectName;   //notice the underscore

次に、プロパティは次のようになります。

@property .... NS/UI/??xxxxxx *MyObjectName;   //no underscore

次に、次のようにゲッター/セッターを合成します。

@synthesize MyObjectName=_MyObjectName;

最後に、プログラム全体でオブジェクトを参照します[self.MyObjectName ...];

于 2009-10-29T19:47:02.107 に答える