İşlemlerde iptal mekanizmasından bahsedin.
sobes.tech yapay zeka
AI'dan gelen yanıt
iOS'taki işlemleri iptal etme mekanizması, Cancellable protokolü ve ilişkili türlerin kullanımına dayanır.
Ana bileşenler:
-
CancellableProtokolü:cancel()metodunun bulunmasını gerektirir ve iptal işlemini başlatır.// Protokol tanımı public protocol Cancellable { func cancel() } -
AnyCancellable:Cancellableile uyumlu herhangi bir türü saklayan ve yok edilirken otomatik olarakcancel()çağıran sarmalayıcı türdür. Aboneliklerin/işlemlerin yaşam döngüsünü yönetmek için kullanışlıdır.// Kullanım örneği var cancellable = AnyCancellable { // İptal işlemi print("İşlem iptal edildi") } // `cancellable` tanımlandığı kapsamda, çıkışta `cancel()` çağrılır -
Combine'da İptal: Combine framework'ünde, çoğu Publisher,
Cancellable'ı uygulayanSubscriptionsağlar.Subscriptionüzerindekicancel()çağrısı, veri akışını durdurur. Genellikle,SubscriptionAnyCancellableiçine alınır ve saklanır.// Combine örneği import Combine let publisher = Timer.publish(every: 1, on: .main, in: .common).autoconnect() var cancellable: AnyCancellable? = publisher.sink { completion in print("Tamamlama: \(completion)") } receiveValue: { date in print("Değer: \(date)") } // Bir süre sonra iptal DispatchQueue.main.asyncAfter(deadline: .now() + 3) { cancellable?.cancel() // `cancel()` çağrısı cancellable = nil // Referansı temizle } -
OperationveOperationQueue: Eski API'lerde de iptal mekanizması vardır.Operationsınıfıcancel()metoduna veisCancelledözelliğine sahiptir.OperationQueue, bu özelliği kontrol eder ve iptal edilen işlemleri planlamaz.import Foundation class MyOperation: Operation { override func main() { if isCancelled { // İptal durumu kontrolü print("İşlem başlamadan iptal edildi") return } // Görevi yerine getir for i in 0..<1000 { if isCancelled { // Görev sırasında iptal kontrolü print("İşlem yürütme sırasında iptal edildi") return } // Yoğun iş veya API çağrısı print("Adım \(i)") } print("İşlem tamamlandı") } } let queue = OperationQueue() let operation = MyOperation() queue.addOperation(operation) // Bir süre sonra iptal DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { operation.cancel() // `cancel()` çağrısı } // Tamamlanmayı bekle (gerçek uygulamada ana thread'de yapılmamalı) // queue.waitUntilAllOperationsAreFinished()
iOS'taki iptal mekanizması asenkron ve işbirlikçidir. cancel() çağrısı, işlemi/veri akışını iptal etme niyetini sinyalize eder, ancak gerçek durdurma, işlemin bu sinyali nasıl işlediğine bağlıdır (örneğin, isCancelled kontrolü veya abonelik iptali tepkisiyle).
İptal edilebilir nesnelerin yönetimi (özellikle AnyCancellable) genellikle bunların koleksiyonlarda (Set<AnyCancellable>) veya nesne özelliklerinde saklanmasıyla yapılır, böylece konteynerin yok edilmesi veya koleksiyondan açıkça kaldırılması sırasında cancel() çağrılır.