(しかし、この質問は全く異なる)ARCでdispatch_releaseを呼び出す必要がありますか?
この非ARCのコード例は、GCDベースのタイマーを設定し、それがdispatch_source_tオブジェクトに対してdispatch_releaseを呼び出す:私はあなたが行うことを学んだ
__block BOOL done = NO;
dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, dispatch_get_main_queue());
if (timer) {
uint64_t milliseconds = 100ull;
uint64_t interval = milliseconds * NSEC_PER_MSEC;
uint64_t leeway = 10ull * NSEC_PER_MSEC;
__block typeof(self) _self = self;
dispatch_source_set_timer(timer, dispatch_walltime(NULL, 0), interval, leeway);
dispatch_source_set_event_handler(timer, ^{
//[_progressBar setProgress:exportSession.progress animated:YES];
if (done) {
dispatch_source_cancel(timer);
dispatch_release(timer);
_self.exportingMovieLabel.hidden = YES;
_self.exportingProgress.hidden = YES;
}
});
dispatch_resume(timer);
}
ARCの下でキューオブジェクトを解放する必要はありません。しかし、ディスパッチソースのような他のGCDオブジェクトは?
主張されている「重複した質問」は、近くでさえありません。答えは特にGCDキューについて話します。この質問は、これが他のGCDオブジェクトに当てはまるかどうかを具体的に質問します。 – openfrog
試してみてください。それが必要でないなら、コンパイラはあなたにあなたをさせません(そうではありません)。 –
私の経験では、アップルのマニュアルには常に、そのリリースを管理する必要があることが記載されています。通常、リリースを行うための特定の機能があります。この場合、ドキュメントを読むと、自分でリリースを管理する必要があるかどうかは、使用方法によって異なるように見えます。私はあなたがdispatch_retainを使用してポインタを保持している場合は、これを自分自身で解放する必要があることを意味します。私はこの機能を使用していませんが、塩の穀物でこれをとってください。 –