私はいくつかの実験をしようとしています。メモリリークを防止しようとしています
- (IBAction)btn1Action:(id)sender {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
[self performSegueWithIdentifier:@"popvc2id" sender:self];
});
NSLog(@"TAP");
}
ボタンは、それがセグエを実行するために1秒かかりますし、このボタンをもう一度タップすると、それは二回セグエをトリガーするタップしますので、ViewController
の2つのインスタンスが作成されます。
私は2つのインスタンスを見ることができますが、そのうちの1つはleaked VC object
です。
今私がやろうとしていますどのようなので、私はメモリリークを防ぐことができ、VC objects
の記録を保持し、第二OBJを破壊しようとする
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
VC2 *vc2 = [segue destinationViewController];
[ary addObject:vc2];
if(ary.count > 1) {
VC2 *vc = (VC2*)ary[1];
vc = nil;
[ary removeObjectAtIndex:1];
}
[ary removeAllObjects];
NSLog(@"-> %@", vc2);
}
です。
しかし、それは動作しません、どのように私はそれを修正することができますか?メモリで書いた
第2のタップを防ぐために、ブールFLAGを使用します。私の提案は、どのように実装する
NSObject CancelPreviousRequest
方法を使用しています。 – AleyRobotics
の後にdispatch_を呼び出す前にフラグをチェックして、問題がタップを2回実行していないことを確認しますか? – Joshua
ローカル変数を 'nil'に設定すると**一般的にメモリから削除されません**。 iOS/ARCにオブジェクトの解放を強制することはできません。 – clemens