2012-04-04 28 views
5

Bir iOS uygulamasına sahibim. Uygulama 2 farklı görünüme sahiptir: Ana ve Ayarlar. Aslında, uygulamanın Ana Görünümde kullanılmadan önce bazı kütüphane ve çerçeveyi yüklemesi ve başlatması gerekir.Bir kez çağrılacak iOS işlevi (uygulama başlatıldığında)

Bu başlatmayı viewDidLoad yöntemine koyduğumda, Tamam çalışıyor. Ancak Ayarlar'a gidip Ana Görünüm'e geri döndüğümüzde, yeniden başlatma başlıyor, bu benim istediğim şey değil ve uygulama bir bellek probleminde sonuçlanıyor.

Uygulama başlatıldığında bir kez çağrılan bir yönteme ihtiyacım var. Herhangi bir fikir?

DÜZENLEME: Sekmeli görünüme geçtim. Bir kez görünümleri yükler. Bu başka bir çözüm.

cevap

7

kullanın bu bir:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

Bu sizin AppDelegate sınıfında olmalıdır.

Eğer application:didFinishLaunching bu kodu koymak istemiyorum yorumlarınızı birinde

+0

Ama r kaçınmak gerekir Başvurunuz hızlı başlaması için: o sınıfta gönderilir 'ifFinishlaunchingWithOptions' içinde büyük iş parçacıklarının açılması – iDroid

+1

@chiLLer ile aynı fikirdeyim. ViewController içinde aramak için bir yönteme ihtiyacım var. – mert

+1

Uygulamanızın ilk lansmanını kastediyorsunuz, sadece şeyleri doğru bir şekilde başlatmanız gerekiyor. Eğer onu "viewDidLoad" içinde yaparsanız, onu yüklediğiniz her sefer için çağrılacaksınız. Burada ihtiyacınız olan şey, onu açıp kapamadığınızı hatırlamaktır. Bunun için devleti hatırlamak için plist veya NSUserDefault anahtar değer çiftini veya "appDelegate" içindeki global bir değişkeni bile koruyabilirsiniz. – iDroid

28

Sen devlet yardımcı olur Umut ve viewDidLoad tutmak istiyoruz. Yalnızca ilk kez çağrılır edilir kodunuzu çalıştırmak için bu pasajı kullanabilirsiniz:

static dispatch_once_t onceToken; 
dispatch_once(&onceToken, ^{ 
    // code here 
}); 

iç blok sadece bir kez çalıştırılacaktır. Görünüm tekrar yüklenirse, blok çağrılmaz. Düzenleyicide dispatch_once yazmaya başlayarak erişebileceğiniz bunun için bir Xcode kod parçacığı olduğunu unutmayın:

enter image description here

enter image description here

+0

Gerçekten harika yanıt @Mike Weller – iDroid

+0

İplik güvenli örnek için teşekkür ederiz – Sergei

0

sizin AppDelegate yılında garantili nesnelerden birinin sadece bir tane örnek uygulama geneline (tekil), bir örnek değişken/mal beyanında edebilirsiniz: UIViewController arasında viewDidLoad sonra BOOL initialized;

Ve, ch Kodun başlatılmış olup olmadığını kontrol edin; değilse, o zaman kod çalıştırmasına ve true değişkeni ayarlayın:

if (!initialized) { 
    // Code goes here 
    initialized = true; 
} 
İlgili konular