0
以下のメソッドは、書籍Professional iOS拡張現実(Apress)のgithubレポジトリからのものです。クリーンアップ^ブロック
クリーンアップを扱うUIViewController
全体の例には、コードはありません。ここで呼び出されたCoreImageの顔検出ルーチンは、完了に数秒かかることがあります。
ユーザーがこのviewControllerを消失させる変更を行った場合はどうなりますか? ^ブロックがキューに保持されていることを理解しています。これは、(顔検出ルーチンが返ってきたとき)メッセージをnilに送信すると、実際にメリットがありますか?
- (IBAction)detectFacialFeatures:(id)sender {
self.detectingView.hidden = NO;
self.scrollView.scrollEnabled = NO;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
CIImage *image = [[CIImage alloc] initWithImage:[FACE_IMAGES objectAtIndex:self.currentIndex]];
NSString *accuracy = self.useHighAccuracy ? CIDetectorAccuracyHigh : CIDetectorAccuracyLow;
NSDictionary *options = [NSDictionary dictionaryWithObject:accuracy forKey:CIDetectorAccuracy];
CIDetector *detector = [CIDetector detectorOfType:CIDetectorTypeFace context:nil options:options];
NSArray *features = [detector featuresInImage:image];
dispatch_async(dispatch_get_main_queue(), ^{
[self drawImageAnnotatedWithFeatures:features];
});
});
}
これは、保持されているviewControllerのビューまたは他のプロパティも保持されていることを意味しますか?メモリリークや、もはや存在しないビューを参照しようとしているVCについて不思議だったので、私は尋ねます。 –
ビューコントローラが他のオブジェクトを保持している場合(おそらくは 'strong'プロパティ付き)、それらは保持しているものと一緒に残っています。もちろん、ビューコントローラコードは' -didReceiveMemoryWarning '、そしてそれらは遠ざかるかもしれません。これは、標準参照カウントメモリ管理です。ブロックは最終的に解放され、それが保持しているものはすべて解放されるため、リークはありません。 –
ok - 詳細な返信をありがとう! –