保持サイクルから来ているようなメモリリークがあります。自転車なしでサイクルを保持しますか?
- (void)nextPhoto {
self.photoIndex++;
if (self.photoIndex >= [self.photos count]) {
self.photoIndex = 0;
}
__weak Photo *photo = [self.photos objectAtIndex:self.photoIndex];
[[SDWebImageManager sharedManager] downloadImageWithURL:[NSURL URLWithString:photo.thumbnailURLString] options:SDWebImageRetryFailed progress:nil
completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
}];
}
コードは2秒タイマーでループしている:
self.timer = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(nextPhoto) userInfo:nil repeats:YES];
総メモリ使用増加を際限なく私は、メモリの使いすぎのイベントを取得するまで、メモリ割り当てサイズは、このコードが実行されるたびに増加しています。
なぜこのコードは保持サイクルを引き起こしていますか?このような状況で自己を扱う特別な方法はありますか?
self.photos
はNSMutableArray
self.photoIndex
あるNSInteger
SDWebImageManager
でよく維持ライブラリです:私は何の問題が表示されていないhttps://github.com/rs/SDWebImageと私は問題なく
プロパティで '[SDWebImageManager sharedManager]'を移動しようとしましたか?そして、完成ブロックの中にコードを投稿できますか? –
すべての画像をダウンロードした後にダウンロードを停止するのではなく、0インデックスから画像をダウンロードし直すのはなぜですか?また、タイマーは毎回の間隔の後にこのメソッドを同期させます。 –
@SaintThread完了ブロックからすべてのコードを削除しましたが、メモリリークの原因となりました。 – Cbas