viewDidDisappear: yöntemin özü, UIViewController yaı5fam döngüsü ve ne zaman çaı1frı31ldı31ı1fı31

Yazar: IT Sectr Yayınlanma: 2026-03-05 Okuma süresi: 9 dk

viewDidDisappear, iOS cihaz ekranı31ndan görünüm tamamen kaybolduktan hemen sonra çaı1frı31lan bir UIViewController yaı5fam döngüsü yöntemidir. Geliı5ftiriciler bunu animasyonları31 durdurmak, RAM'i serbest bı31rakmak, bildirimlerden aboneliı1fi iptal etmek ve mevcut durumu kaydetmek için kullanı31r. Apple Developer Documentation (2025)'ye göre, bu yöntemin doı1fru uygulanması31, aktif navigasyona sahip uygulamalarda bellek sı31zı31ntı31ları31nı31 %40'a kadar önler. Bu olmadan, arka plan iı5flemleri çalı31ı5fmaya devam ederek pil ve CPU kaynakları31nı31 tüketebilir. viewDidDisappear'ı31n doı1fru kullanı31mı31, bir iOS geliı5ftiricisinin temel becerilerinden biridir ve uygulama performansı31nı31 ve kararlı31lı31ı1fı31nı31 doı1frudan etkiler.

Önemli noktalar

  • viewDidDisappear — görünüm ekrandan kaybolduktan sonra çaı1frı31lan son yaı5fam döngüsü yöntemi
  • Kaynakları31 serbest bı31rakmak için kullanı31lı31r: zamanlayı31cı31ları31 durdurma, yükleme göstergelerini gizleme
  • Sı31zı31ntı31ları31 önlemek için NotificationCenter'dan aboneliı1fi iptal etmek ve KVO gözlemleri için gereklidir
  • Geçiı5f animasyonu tamamlandı31ktan sonra çaı1frı31lması31 açı31sı31ndan viewWillDisappear'dan farklı31dı31r
  • deinit yerine geçmez — deinit nesnenin nihai yok edilmesinden sorumludur

viewDidDisappear nedir?

viewDidDisappear, sistemin görünüm ekrandaki pencere hiyerarı5fisinden tamamen kaldı31rı31ldı31ktan sonra çaı1fı31rdı31ı1fı31 UIViewController süper sı31nı31fı31nı31n bir kanca yöntemidir. UIKit'teki standart görünüm yaı5fam döngüsünün bir parçası31dı31r ve geliı5ftiriciye bitiı5f iı5flemlerini gerçekleı5ftirmesi için bir nokta saı1flar.

Yöntem UIViewController protokolünde bildirilir ve tüm alt sı31nı31flarda geçersiz kı31lı31nabilir. Yöntem imzası31 ı5föyledir: override func viewDidDisappear(_ animated: Bool). animated parametresi, geçiı5fe animasyonun eı5flik edip etmediı1fini belirtir. Bu, daha hassas davranı31ı5f kontrolü için programatik ve animasyonlu geçiı5fler arası31nda ayrı31m yapı31lması31nı31 saı1flar.

Animasyon baı5flamadan önce çaı1frı31lan viewWillDisappear'dan farklı31 olarak viewDidDisappear, görünümün artı31k kullanı31cı31 tarafı31ndan görülemez olduı1funu garanti eder. Bu, yalnı31zca arayüz tamamen gizlendikten sonra yürütülmesi gereken iı5flemler için kritiktir — örneı1fin, tam ekran kaplama öı1felerini gizlemek veya video kaydı31nı31 sonlandı31rmak.

ı30mza ve bildirim

Yöntem, temel sı31nı31f UIViewController içinde tanı31mlanı31r ve ı5fu imzaya sahiptir:

swift
import UIKit

class MyViewController: UIViewController {
    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)
        // Kaynakları31 serbest bı31rak ve aboneliı1fi iptal et
    }
}

Uygulamanı31n ilk satı31rı31nda super.viewDidDisappear(animated) çaı1frı31sı31 bir UIKit gereksinimidir. Bu olmadan, süper sı31nı31f görünüm görüntülemeyle ilgili iç süreçleri doı1fru ı5fekilde tamamlayamaz. Bu kuralı31 görmezden gelmek, öngörülemeyen navigasyon davranı31ı5fı31na ve potansiyel çökmelere yol açar.

viewDidDisappear'ı31n UIViewController yaı5fam döngüsündeki yeri

Tam UIViewController yaı5fam döngüsü, her biri görünüm varlı31ı1fı31nı31n belirli bir aı5faması31ndan sorumlu altı31 temel yöntemden oluı5fur. viewDidDisappear, viewWillDisappear'ı31 takiben kaybolma sı31rası31nı31 tamamlar. Baı5flatma ve kaynak serbest bı31rakmayı31 doı1fru ı5fekilde daı1fı31tmak için tüm yöntemlerin çaı1frı31lma sı31rası31nı31 anlamak önemlidir.

Görünüm göründüı1fünde sı31ra: viewDidLoadviewWillAppearviewDidAppear. Gizlenirken: viewWillDisappearviewDidDisappear. Son aı5fama — UIViewController nesnesi yok edildiı1finde çaı1frı31lan deinit. Bu altı31 yöntem, öngörülebilir durum yönetimini garanti eden tam bir döngü oluı5fturur.

YöntemÇaı1frı31lma anı31Tipik kullanı31m
viewDidLoadGörünüm belleı1fe yüklendikten sonraı30lk UI kurulumu, verilere abone olma
viewWillAppearGörünüm ekranda görünmeden önceGörüntülemeden önce verileri güncelleme
viewDidAppearGörünüm ekranda göründükten sonraAnimasyonları31 baı5flatma, gözlemi baı5flatma
viewWillDisappearGörünüm kaybolmadan önceGirilen verileri kaydetme, iı5flemleri iptal etme
viewDidDisappearGörünüm kaybolduktan sonraKaynakları31 serbest bı31rakma, bildirimlerden aboneliı1fi iptal etme
deinitNesne yok edildiı1findeSon temizlik, güçlü referansları31 serbest bı31rakma

Bu yöntemlerin her biri, ilgili geçiı5f baı5fı31na tam olarak bir kez çaı1frı31lı31r. Bir istisna, kaynak baskı31sı31 nedeniyle ViewController bellekten boı5faltı31lı31p ardı31ndan geri yüklenirse yeniden çaı1frı31labilen viewDidLoad'dur. Bu durumda viewDidDisappear, yinelenen viewDidLoad'dan önce gelir.

Geçiı5f animasyonuyla iliı5fkisi

Yöntem imzası31ndaki animated parametresi, geçiı5fin animasyonlu olup olmadı31ı1fı31nı31 belirtir. Bu, animasyonsuz programatik geçiı5fler (örneı1fin, rootViewController ayarlarken) ile kullanı31cı31 tarafı31ndan baı5flatı31lan animasyonlu geçiı5fler arası31nda ayrı31m yapmak için kullanı31ı5flı31dı31r. Deı1fer false ise, denetleyici sistem tarafı31ndan zorla gizlenmiı5f olabilir — bu durumda, bazı31 zamana baı1flı31 iı5flemler anlamsı31z olabilir.

viewDidDisappear ne zaman çaı1frı31lı31r

Sistem viewDidDisappear'ı31 tam olarak iki senaryoda çaı1fı31rı31r: Bir ViewController navigasyon yı31ı1fı31nı31ndan kaldı31rı31ldı31ı1fı31nda ve baı5fka bir denetleyici tarafı31ndan kapsandı31ı1fı31nda. Her iki durumda da yöntem, görünümün artı31k kullanı31cı31 tarafı31ndan görülemeyeceı1fini bildirir ve geliı5ftirici arka planda gerekmeyen kaynakları31 serbest bı31rakmalı31dı31r. Bu senaryoları31 anlamak, uygulama durumu hakkı31nda yanlı31ı5f varsayı31mları31 önler.

ı30lk senaryo — UINavigationController'dan pop. Kullanı31cı31 geri düı1fmesine bastı31ı1fı31nda popViewController:animated çaı1frı31lı31r. Mevcut denetleyici viewDidDisappear alı31r ve ardı31ndan ona daha fazla güçlü referans yoksa deinit çaı1frı31lı31r. ı30kinci senaryo — present/dismiss. Yeni bir denetleyici kalı31cı31 olarak sunulduı1funda, presentingViewController viewDidDisappear alı31r. Kapatı31rken, bu yöntem kalı31cı31 olarak sunulan denetleyicide çaı1frı31lı31r.

Üçüncü, daha az belirgin senaryo — child ViewController ekleme. Bir kapsayı31cı31 denetleyiciye (örneı1fin, UIPageViewController veya UITabBarController) yeni bir alt denetleyici eklenirse, etkin alt denetleyici viewDidDisappear alı31r. Bu, sekmeleri veya sayfa karuseli olan uygulamalar için kritiktir — her sekme deı1fiı5fimi, etkin olmayan ekranı31n çalı31ı5fması31nı31 doı1fru ı5fekilde askı31ya almalı31dı31r.

ı30stisnalar ve belirgin olmayan durumlar

Önemli bir istisna vardı31r: Bir UIViewController kalı31cı31 bir pencerede görüntüleniyorsa ve kullanı31cı31 aı5faı1fı31 kaydı31rarak etkileı5fimli olarak kapatı31yorsa, jest tamamlanmazsa sistem viewDidDisappear'ı31 çaı1fı31rmayabilir. Bu davranı31ı5f, iOS 13 ile birlikte etkileı5fimli kapatma ile ortaya çı31ktı31. Geliı5ftiriciler, olayı31n alı31nması31nı31 garantilemek için durumu UIAdaptivePresentationControllerDelegate ve didDismiss yöntemi aracı31lı31ı1fı31yla yönetmelidir.

Baı5fka bir özellik — bellek uyarı31ları31. Bellek düı5fük olduı1funda, sistem ekranda görünmeyen bir denetleyicinin görünümünü boı5faltabilir. Bu durumda viewDidDisappear genellikle boı5faltmadan önce çaı1frı31lı31r, ancak geliı5ftirici bir güvenlik aı1fı31 olarak didReceiveMemoryWarning içinde kritik temizlik iı5flemlerini yinelemelidir. Bu yaklaı5fı31m, aı5fı31rı31 senaryolarda veri kaybı31nı31 önler.

Tipik kullanı31m senaryoları31

viewDidDisappear üç ana iı5flem kategorisi için kullanı31lı31r: etkinlikleri durdurma, kaynakları31 serbest bı31rakma ve durumu kaydetme. Her kategorinin iOS geliı5ftirici topluluı1fu tarafı31ndan geliı5ftirilen kendi en iyi uygulamaları31 vardı31r. Uygulama örnekleriyle en yaygı31n senaryoları31 inceleyelim.

  • Animasyonları31 durdurma — CALayer için layer.removeAllAnimations() çaı1frı31sı31, UIView.animate blokları31nı31 durdurma
  • Kaynakları31 serbest bı31rakma — büyük görselleri sı31fı31rlama, önbelleı1fe alı31nmı31ı5f verileri temizleme, dosya tanı31mlayı31cı31ları31nı31 kapatma
  • Bildirimlerden aboneliı1fi iptal etme — NotificationCenter.default'dan gözlemcileri kaldı31rma, KVO gözlemlerini durdurma
  • ı30lerlemeyi kaydetme — düzenleme ekranı31nı31 kapatı31rken CoreData veya UserDefaults'a taslak yazma
  • Kaplamaları31 gizleme — geçiı5ften sonra kalmaması31 gereken yükleme göstergelerini, araç ipuçları31nı31 ve popover öı1felerini kaldı31rma

Örnek: NotificationCenter'dan aboneliı1fi iptal etme

Tipik bir hata, viewDidLoad içinde bildirimlere abone olmak ve asla abonelikten çı31kmamaktı31r. Bu, iı5fleyicinin serbest bı31rakı31lmı31ı5f bir nesne üzerinde çaı1frı31lması31na neden olarak çökmeye yol açar. Doı1fru yaklaı5fı31m, viewWillAppear'da abone olmak ve viewDidDisappear'da abonelikten çı31kmaktı31r; bu, aboneliı1fin yalnı31zca denetleyici ekranda görüntülenirken etkin olması31nı31 saı1flar.

swift
override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    NotificationCenter.default.addObserver(
        self,
        selector: #selector(handleKeyboardShow),
        name: UIResponder.keyboardWillShowNotification,
        object: nil
    )
}

override func viewDidDisappear(_ animated: Bool) {
    super.viewDidDisappear(animated)
    NotificationCenter.default.removeObserver(self)
}

Bu desen, bildirim iı5fleyicisinin yalnı31zca denetleyici ekranda görünürken etkin olması31nı31 garanti eder. Baı5fka bir ekrana geçerken tüm abonelikler otomatik olarak kaldı31rı31lı31r ve geri dönüldüı1fünde yeniden oluı5fturulur. Bu, uygulamanı31n güvenilirliı1fini artı31rı31r ve bildirimlerle ilgili bir dizi hatayı31 ortadan kaldı31rı31r.

Swift kod örnekleri

Gerçek projelerde viewDidDisappear kullanı31mı31na iliı5fkin iki pratik örneı1fi inceleyelim. ı30lk örnek, ekran gizlendiı1finde bir zamanlayı31cı31nı31n durdurulması31nı31, ikincisi klavye gözleminin doı1fru ı5fekilde sonlandı31rı31lması31nı31 gösterir. Her iki örnek de denetleyici etkin deı1filken kaynakları31 serbest bı31rakma ilkesini izler.

Bir zamanlayı31cı31yı31 durdurma

Kullanı31cı31 arayüzünü güncellemek için ekranda bir Timer çalı31ı5fı31yorsa (örneı1fin, geri sayı31m veya karusel), denetleyici gizlendiı1finde durdurulmalı31dı31r. Zamanlayı31cı31nı31n arka planda çalı31ı5fmaya devam etmesi yalnı31zca CPU kaynakları31nı31 tüketmekle kalmaz, aynı31 zamanda görünmeyen bir kullanı31cı31 arayüzünü güncellemeye çalı31ı5fı31rken bir istisnaya da neden olabilir.

swift
class CountdownViewController: UIViewController {
    private var countdownTimer: Timer?
    private var remainingSeconds: Int = 60

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        startTimer()
    }

    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)
        invalidateTimer()
    }

    private func invalidateTimer() {
        countdownTimer()?.invalidate()
        countdownTimer = nil
    }
}

Gizlenirken videoyu duraklatma

Birçok uygulamada, AVPlayer yerleı5fik bir oynatı31cı31da video oynatı31r. Kullanı31cı31 baı5fka bir ekrana geçerse, video otomatik olarak duraklatı31lmalı31dı31r. Bunu viewDidDisappear'da uygulamak, duraklamanı31n ekran tamamen gizlendikten sonra gerçekleı5fmesini garanti eder — bu, geçiı5f sı31rası31nda siyah bir karenin yanı31p sönmesini önler.

swift
override func viewDidDisappear(_ animated: Bool) {
    super.viewDidDisappear(animated)
    if player().timeControlStatus == .playing {
        player().pause()
        playerLayer().removeFromSuperlayer()
    }
    player = nil
}

Duraklatmanı31n ardı31ndan player deı1fiı5fkenini sı31fı31rlamak, video arabelleklerinin kapladı31ı1fı31 belleı1fi de serbest bı31rakı31r. Bu yaklaı5fı31m, arabelleı1fin onlarca megabayt kaplayabildiı1fi uzun videolara sahip uygulamalar için özellikle önemlidir. Duraklatmayı31 referansları31 sı31fı31rlama ile birleı5ftirmek, uygulamanı31n arka plandaki ayak izini en aza indirir.

viewDidDisappear ve diı1fer yaı5fam döngüsü yöntemleri

viewDidDisappear genellikle viewWillDisappear ve deinit ile karı31ı5ftı31rı31lı31r, ancak bu yöntemlerin her birinin kendi sorumluluk alanı31 vardı31r. Araları31ndaki sı31nı31rları31 anlamak, kararlı31 bir iOS uygulama mimarisinin anahtarı31dı31r. Yanlı31ı5f kullanı31m, kaynakları31n iki kez serbest bı31rakı31lması31na veya tersine kaynak sı31zı31ntı31ları31na yol açabilir.

viewDidDisappear ve viewWillDisappear arası31ndaki temel fark, çaı1frı31lma anı31dı31r. viewWillDisappear, görünüm hala görünürken ancak kaybolmaya hazı31rlanı31rken çaı1frı31lı31r. Bu, görünür verileri (giriı5f alanları31ndaki metin) kaydetmek için uygundur. viewDidDisappear, animasyon tamamlandı31ktan sonra, görünümün kesinlikle görülemez olduı1funda çaı1frı31lı31r — görsel durumla ilgili olmayan kaynakları31 serbest bı31rakmak için idealdir.

deinit, viewDidDisappear'ı31n aksine, yalnı31zca UIViewController nesnesi bellekten yok edildiı1finde çaı1frı31lı31r. Denetleyici basitçe gizlenmiı5fse (örneı1fin, kalı31cı31 bir pencere tarafı31ndan kapsanmı31ı5fsa), deinit çaı1frı31lmaz. Bu durumda, viewDidDisappear bitiı5f iı5flemlerini gerçekleı5ftirmek için tek noktadı31r. Tam kaynak temizliı1fi deinit içinde yapı31lmalı31dı31r, ancak viewDidDisappear bir sonraki görünüme kadar geçici serbest bı31rakmayı31 yönetir.

Hangi yöntemin ne zaman kullanı31lacaı1fı31

  • viewWillDisappear — girilen verileri kaydetme, geçiı5f baı5flangı31cı31 hakkı31nda analiz gönderme
  • viewDidDisappear — animasyonları31 durdurma, bildirimlerden aboneliı1fi iptal etme, kaplama öı1felerini gizleme
  • deinit — büyük kaynakları31n son serbest bı31rakı31lması31, aı1f baı1flantı31ları31nı31 kapatma

SwiftUI ile geliı5ftirirken viewDidDisappear yöntemi kullanı31lmaz — bunun yerine benzer ı5fekilde çalı31ı5fan .onDisappear deı1fiı5ftiricisi kullanı31lı31r. Ancak SwiftUI, doı1frudan yaı5fam döngüsü kontrolünden yoksundur ve geliı5ftiriciler kaynak yönetimi için Combine ve State nesnelerine güvenir. UIKit uygulamaları31 için viewDidDisappear, ekran kaybolması31nı31 yönetmek için birincil araç olmaya devam etmektedir.

Uygulamada sı31k yapı31lan hatalar

Deneyimli iOS geliı5ftiricileri bile viewDidDisappear ile çalı31ı5fı31rken hatalar yapar. En yaygı31n beı5f sorunu ve bunları31 önleme yolları31nı31 inceleyelim. Bu anti-desenleri bilmek, denetleyici yaı5fam döngüsüyle ilgili bulunması31 zor hataları31 önlemeye yardı31mcı31 olacaktı31r.

  • Eksik super.viewDidDisappear — UIKit'in doı1fru çalı31ı5fması31 için super çaı1frı31sı31 zorunludur; yokluı1fu denetleyicinin iç durumunu bozabilir
  • viewDidDisappear'da aı1fı31r iı5flemler — viewDidDisappear'da büyük verilerin senkron yazı31lması31 ana iı5f parçacı31ı1fı31nı31 bloke eder ve geçiı5f animasyonunu bozar
  • Unutulan bildirim abonelikten çı31kma — viewDidDisappear'da removeObserver çaı1frı31lmazsa, iı5fleyici bir zombi nesne üzerinde tetiklenerek EXC_BAD_ACCESS'e neden olabilir
  • Çift abonelikten çı31kma — baı5fka bir yerde zaten kaldı31rı31lmı31ı5f bir gözlemciyi kaldı31rmak NSInternalInconsistencyException'a yol açar
  • Çaı1frı31lma sı31rası31na baı1fı31mlı31lı31k — iç içe kaplarda, alt ve üst denetleyiciler için viewDidDisappear çaı1frı31lma sı31rası31 garanti edilmez

ı30ı5f parçacı31ı1fı31 güvenliı1fine özel dikkat gösterilmelidir. viewDidDisappear ana iı5f parçacı31ı1fı31nda çaı1frı31lı31rsa (UIKit tarafı31ndan garanti edilir), ancak kaynak temizliı1fi asenkron iı5flemler içeriyorsa, paylaı5fı31lan verilere eriı5fim senkronize edilmelidir. Asenkron bir görevi tamamladı31ktan sonra kullanı31cı31 arayüzünü güncellemek için viewDidDisappear içinde DispatchQueue.main.async kullanmak yaygı31n ancak doı1fru bir yaklaı5fı31mdı31r.

Bir diı1fer önemli anti-desen — viewDidDisappear içinde yeni bir geçiı5f veya kalı31cı31 sunum baı5flatabilecek temsilci yöntemlerini çaı1fı31rma. Bu, ilk çaı1frı31 tamamlanmadan viewDidDisappear'ı31n yeniden çaı1frı31labileceı1fi bir döngü oluı5fturur. Apple, yaı5fam döngüsü yöntemleri içinde kalı31cı31 sunumlardan kaçı31nı31lması31nı31 ve bunları31n ayrı31 olay iı5fleyicilerine taı5fı31nması31nı31 önerir.

Sı31kça sorulan sorular

viewDidDisappear viewWillDisappear'dan nası31l farklı31dı31r?

viewWillDisappear gizleme animasyonu baı5flamadan önce, görünüm hala görünürken çaı1frı31lı31r. viewDidDisappear görünüm tamamen kaybolduktan sonra çaı1frı31lı31r. Veri kaydetmek için viewWillDisappear'ı31, kaynakları31 serbest bı31rakmak için viewDidDisappear'ı31 kullanı31n.

super.viewDidDisappear çaı1frı31lmalı31 mı31?

Evet, super.viewDidDisappear(animated) çaı1frı31sı31 zorunludur. UIKit bu yöntemi iç bildirimler ve geçiı5f durumunu tamamlama için kullanı31r. super çaı1frı31sı31 olmadan UINavigationController ve UITabBarController hatalı31 çalı31ı5fabilir.

viewDidDisappear çaı1frı31lmayabilir mi?

Evet, iOS 13+'te etkileı5fimli kapatma (aı5faı1fı31 kaydı31rma) ile jest tamamlanmazsa yöntem çaı1frı31lmayabilir. Olayı31n alı31nması31nı31 garanti etmek için UIAdaptivePresentationControllerDelegate temsilcisini ve presentationControllerDidDismiss yöntemini kullanı31n.

Hangisi daha iyi: viewDidDisappear mı31 yoksa deinit mi?

deinit yalnı31zca nesne yok edildiı1finde çaı1frı31lı31rken, viewDidDisappear her gizlemede çaı1frı31lı31r. Her geçiı5fte kaynakları31 serbest bı31rakmak için (örneı1fin, bildirimlerden aboneliı1fi iptal etme) viewDidDisappear'ı31 kullanı31n. Denetleyici kaldı31rı31ldı31ı1fı31nda son temizlik için deinit'i kullanı31n.

SwiftUI'de viewDidDisappear nası31l çalı31ı5fı31r?

SwiftUI'de viewDidDisappear yerine .onDisappear { } deı1fiı5ftiricisi kullanı31lı31r. Görünüm hiyerarı5fiden kaybolduı1funda çaı1frı31lı31r. UIKit'in aksine SwiftUI, onDisappear'ı31n tüm animasyon senaryoları31nda çaı1frı31lacaı1fı31nı31 garanti etmez.

Özet

  • viewDidDisappear — gizlemeden önceki son yaı5fam döngüsü yöntemi, geçiı5f animasyonu tamamlandı31ktan sonra çaı1frı31lı31r
  • Ana amaç — kaynakları31 serbest bı31rakmak, zamanlayı31cı31ları31 durdurmak ve bildirimlerden aboneliı1fi iptal etmek
  • UIKit'in doı1fru çalı31ı5fması31 için super.viewDidDisappear çaı1frı31sı31 zorunludur
  • viewWillDisappear'dan çaı1frı31lma zamanı31 açı31sı31ndan farklı31dı31r: animasyondan sonra, öncesinde deı1fil
  • deinit yerine geçmez — deinit nesne yok edildiı1finde çaı1frı31lı31r, viewDidDisappear her gizlemede
  • Aı1fı31r senkron iı5flemler için kullanı31lmaz — ana iı5f parçacı31ı1fı31nı31 bloke eder ve animasyonu bozarlar
  • iOS 13+'te garantili çaı1frı31 için UIAdaptivePresentationControllerDelegate aracı31lı31ı1fı31yla ek iı5flem gerekir

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun