2

私は困惑しています!

カウントダウンを実行するタイマーのセットアップがあります。タイマー内で経過時間で UILabels を更新すると、すべてうまく機能しますが、楽器をテストすると、テキストの設定によってメモリリークが発生するという奇妙なことがあります。

タイマーコードは

NSTimer* timer = [NSTimer timerWithTimeInterval:1.0f
                                    target:self
                                    selector:@selector(myTimer:)
                                    userInfo:nil
                                    repeats:YES];
self.pnTimer = timer;
[[NSRunLoop mainRunLoop] addTimer:self.pnTimer forMode:NSRunLoopCommonModes];

私のタイマーメソッドには次のものがあります...

- (void)myTimer:(NSTimer*)timer {
  ...
  if (self.secondsPassed <=9) {
     [self.secondsLabel setText:[NSString stringWithFormat:@"0%i",self.secondsPassed]];
  } else {
     [self.secondsLabel setText:[NSString stringWithFormat:@"%i",self.secondsPassed]];
  }
  ...

}

[self.secondsLabel... 行をコメントアウトし、Instruments で #Living 列を調べると、ほぼそのままの状態ですが、コードを実行してラベルを更新すると、アプリの動作が遅くなるまで #Living 列が絶えず増加します。応答しない (20 分程度)

ラベルは次のように定義されます。

    @property (weak, nonatomic) IBOutlet UILabel *secondsLabel;

iOS 6.1 を使用する iPhone 5 デバイスでもこれをテストしていることに注意してください。

ここで私が間違っている可能性のあるアイデアはありますか? 助けてくれてありがとう

4

1 に答える 1

0

それが何であるかを見つけました。UI には、光沢のあるグラデーション ボタン UIButton+Glossy ( http://www.mlsite.net/blog/?p=232 ) もあります。ボタンを削除し、ラベルを更新してもメモリ リークが発生しなくなりました。毎秒ラベルを更新すると、UI が完全に更新され、ボタン自体も更新され、それ自体に問題があると思います。

ありがとう

于 2013-02-18T12:40:20.663 に答える