1

チャットアプリケーションにLibPusherAPIを実装しようとしているアプリケーションがあります。

そのAPIはアーク対応であり、私はそれを非アークプロジェクトに含めました。
いくつかの警告を除いて、正常に動作しています。

今私の問題は、ナビゲーションバーに次のようなボタンを追加したことです。

UIButton *btnNext1 =[[UIButton alloc] init];
    [btnNext1 setBackgroundImage:[UIImage imageNamed:@"back_btn.png"] forState:UIControlStateNormal];

    btnNext1.frame = CGRectMake(100, 100,60, 31);
    UIBarButtonItem *btnNext =[[UIBarButtonItem alloc] initWithCustomView:btnNext1];
    [btnNext1 addTarget:self action:@selector(backButtonClicked) forControlEvents:UIControlEventTouchUpInside];
    self.navigationItem.leftBarButtonItem = btnNext;
    [btnNext1 release];

それはうまく機能していて、アクションで私はこれをやっています:

PusherPresenceEventsViewController *rootView = ( PusherPresenceEventsViewController*)[self.navigationController.viewControllers objectAtIndex:1];
rootView.newmessage =@"";
[self.navigationController popToViewController:rootView animated:YES];
[rootView release];

最初の2回も正常に動作しています。
ただし、3回目は、アクセス不良エラーが発生します。
どこが間違っていたのかわかりませんが、誰か助けてもらえますか?

4

2 に答える 2

3
UIButton *btnNext1 =    [UIButton buttonWithType:UIButtonTypeCustom]

割り当てないので、Rootviewも解放します。

于 2012-10-22T14:00:33.540 に答える
3

iProgrammerが正しく識別したように、問題は、所有していないものをリリースしていることです(基本的なメモリ管理ルールに従って、、、、、およびでalloc始まるメソッドnewを介して作成したもののみを「所有」します)。を削除すると、問題が解決するはずです。copymutableCopy[rootView release]

ちなみに、静的アナライザーを使用してコードを実行することをお勧めします([製品]メニューの[分析]を選択するか、shift+ command+を押しますB)。アナライザーによって生成される警告はゼロである必要があります。この余分なreleaseものは、アナライザーがおそらくあなたの注意を引いたであろう種類の問題の例です。静的アナライザは、非ARCコードを悩ませがちなあらゆる種類の基本的なメモリ管理の問題を見つけるのに優れています。

于 2012-10-22T15:24:27.453 に答える