0

の状態に応じてタイトルテキストを変更したいloadView20 を作成しています。UIButtonUIPageControl

NSArray現在のページが変更されたときに呼び出されるイベントに読み込まれる保存前の plist がありarrChars、ボタンのタイトルを配列から関連するテキスト タイトルに設定します。これを行うコードは次のとおりです。

for (int i = 1; i < (ButtonsPerPage + 1); i++) {

    UIButton *uButton = (UIButton *)[self.view viewWithTag:i];

    if(iPage == 1) {
        iArrPos = (i - 1);
    } else {
        iArrPos = (iPage * ButtonsPerPage) + (i - 1);
    }

    [uButton setAlpha:0];

    NSLog(@"Trying: %d of %d", iArrPos, [self.arrChars count]);
    if (iArrPos >= [self.arrChars count]) {                    
        [uButton setTitle: @"" forState: UIControlStateNormal];
    } else {

        NSString *value = [[NSString alloc] initWithFormat:@"%@", [self.arrChars objectAtIndex:iArrPos]];
        NSLog(@"%@", value);

        [uButton setTitle: [[NSString stringWithFormat:@"%@", value]    forState: UIControlStateNormal];

        [value release];

        //////Have tried:
        //////[uButton setTitle: value forState: UIControlStateNormal];

        //////Have also tried:
        //////[uButton setTitle: [self.arrChars objectAtIndex:iArrPos] forState: UIControlStateNormal];

        //////Have also also tried:
        //////[uButton setTitle: [[self.arrChars objectAtIndex:iArrPos] autorelease] forState: UIControlStateNormal];
    }

    [uButton setAlpha:1];
}

ボタンのタイトルを設定すると、前のタイトルが自動解放されていないように見え、割り当てがどんどん増えていきます。私は何を間違っていますか?

私が見る限り、Instruments でオブジェクトがリークしていないのに、メモリの警告が表示されるまで生きている割り当ての合計が上昇し続けるため、割り当てによって物事を追跡することはリークを追跡するための悪い方法であると以前に言われました。そこを追跡するためのより良い方法があれば、知りたいです。

アップデート

配列から取得した値を使用する代わりに、タイトルを @"Test" に設定したことを忘れていました。問題なく、ページを変更するたびに無限に増加することはありません。

4

2 に答える 2

0

長い夜を過ごした後、私は弾丸を噛んでこれをAppleのDTSに送ることにしました。

応答は役に立ちましたが、私が望んでいたものではありませんでした。arrChar内には、ロードされたときにアンロードされないと言われるグリフが含まれることがありました。完全な説明:

私の知る限り、iOSは、グリフがメモリにロードされた後、グリフをアンロードしません。そのため、Instrument.appに表示されるメモリ割り当ては、新しい文字をロードするときに増加し、後で前後に移動するときにフラットに保たれます。何も変更できないのは、iOSの設計動作とほぼ同じです。本当にメモリ使用量を制御したい場合は、文字を画像として作成し、UIImage(imageWithContentsOfFile:)を使用してロードおよびリリースすることもできます。

これが誰かを助けてくれることを願っています。

于 2012-09-16T12:11:51.857 に答える
0

あなたは多くの不必要な文字列の作成とフォーマットを行っています。これらの行を置き換えることができます。

NSString *value = [[NSString alloc] initWithFormat:@"%@", [self.arrChars objectAtIndex:iArrPos]];
NSLog(@"%@", value);

[uButton setTitle: [[NSString stringWithFormat:@"%@", value] forState: UIControlStateNormal];

これらと:

NSString *title = [self.arrChars objectAtIndex:iArrPos];

[uButton setTitle:title forState:UIControlStateNormal];
[title release];

setTitle:onを使用するとtitle、保持カウントが増加します。必ず後で実行しreleaseてください。

于 2012-06-24T09:12:54.677 に答える