2012-04-01 2 views
0

私のコードを浄化していますが、これまでのところとてもうまくいきました。私が見つけることができないもの!私のUITableViewController viewDidLoadメソッドでUIViewのメモリリークを特定できません

インスツルメンツ私のUITableViewControllerに次のコードに私を指す:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.parentView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 50)]; 
    self.parentView.backgroundColor = [UIColor clearColor]; 
    self.parentView.opaque = NO; 

    self.mainButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [self.mainButton setTitleColor:[UIColor colorWithRed:0.16f green:0.16f blue:0.16f alpha:1.0] forState:UIControlStateNormal]; 
    [self.mainButton setTitleShadowColor:[UIColor whiteColor] forState:UIControlStateNormal]; 
    self.mainButton.titleLabel.shadowOffset = CGSizeMake(0.0, 1.0); 
    [self.mainButton setBackgroundImage:[UIImage imageNamed:@"grayButton.png"] forState:UIControlStateNormal]; 
    self.mainButton.titleLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:14]; 
    self.mainButton.frame = CGRectMake(0, 4, 102, 35); 
    self.mainButton.center = CGPointMake(160, 25); 
    [self.mainButton setTitle:@"Control" forState:UIControlStateNormal]; 
    [self.mainButton addTarget:self action:@selector(controlIt) forControlEvents:UIControlEventTouchUpInside]; 

    [self.parentView addSubview:self.mainButton]; 
    self.tableView.tableHeaderView = self.parentView; 
} 

parentViewdeallocで放出されます。私もmainButtonをリリースしましたが、この場合にはそれが必要かどうかはわかりません。

それは、このラインとは何かを持っている場合、私は思ったんだけど:

self.tableView.tableHeaderView = self.parentView; 

奇妙なことである、という私はそれので、ビューコントローラのメインビューだと思うのアドレスにリークポイント75回以上のメモリの保持/解放/自動解放の履歴があります。

本当にこれに固執して、いくつかのガイダンスに感謝します。

+0

あなたが指摘している問題は問題です。 parentViewを別のプロパティとして設定すると、保持カウントが+1になり、そのリークが発生します。そのプロパティを-deallocでnilに設定します。 –

+0

これはどのようにメモリ管理の面で機能しますか? 'dealloc'でparentViewをnilに設定すると、保持カウントは1減算されるか、それとも完全に消去されますか? – sooper

+0

これは1だけ減額されます。 –

答えて

1

あなたが指摘している問題は問題です。 parentViewを別のプロパティとして設定すると、保持カウントが+1になり、そのリークが発生します。そのプロパティを-deallocでnilに設定します。

1

parentViewが保持プロパティである場合、これは漏れた:

self.parentView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 50)];

をdeallocを中にあなたのリリースは、プロパティの割り当てのバランスを取るだろうが、何もアロケーションのバランスをとりません。 製品を試す>分析し、その内容を確認します。

関連する問題