2012-04-04 28 views
5

Mam aplikację na iOS. Aplikacja ma 2 różne widoki: główny i ustawienia. W rzeczywistości aplikacja musi załadować i zainicjować niektóre biblioteki i ramy, zanim zostaną użyte w widoku głównym.Funkcja iOS może być wywołana tylko raz (po zainicjowaniu aplikacji)

Po umieszczeniu tej inicjalizacji w metodzie viewDidLoad, działa poprawnie. Ale kiedy przejdziesz do Ustawień i wrócisz do Widoku Głównego, inicjalizacja rozpocznie się ponownie, co nie jest tym, czego chcę, a aplikacja powoduje problem z pamięcią.

Potrzebuję metodę, która jest wywoływana raz, gdy aplikacja jest uruchomiona. Dowolny pomysł?

EDYCJA: Przejdę do widoku z zakładkami. Ładuje widoki raz. To kolejne rozwiązanie.

Odpowiedz

7

Użyj tego jeden:

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

Powinno być w twojej klasie appdelegate.

Nadzieja pomaga

+0

Ale dla swojej aplikacji szybkiego uruchamiania należy unikać r unning duże wątki wewnątrz 'didFinishlaunchingWithOptions' – iDroid

+1

Zgadzam się z @chiLLer. Potrzebuję metody wywoływania wewnątrz ViewController. – mert

+1

Masz na myśli początkowe uruchomienie swoich aplikacji, ale musisz wszystko poprawnie zainicjować. jeśli zrobisz to wewnątrz 'viewDidLoad' oczywiście będzie on wywoływany za każdym razem gdy go załadujesz, Tutaj wystarczy pamiętać, czy otworzyłeś go alresdy czy nie. w tym celu można zachować parę kluczy plist lub NSUserDefault lub nawet zmienną globalną w 'appDelegate', aby zapamiętać stan .... – iDroid

28

stanu, w jednym z komentarzy, że nie chcą, aby umieścić ten kod w application:didFinishLaunching i chcesz zachować go w viewDidLoad. Można użyć tego fragmentu kodu, aby uruchomić dopiero po raz pierwszy wywoływana jest:

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

Wewnętrzny blok zostanie wykonany tylko raz. Jeśli widok zostanie ponownie załadowany, blok nie zostanie wywołany. Zauważ, że nie jest to fragment kodu Xcode do tego, który można uzyskać dostęp poprzez rozpoczęcie wpisać dispatch_once w edytorze:

enter image description here

enter image description here

+0

Naprawdę wspaniała odpowiedź @Mike Weller – iDroid

+0

Dziękujemy za wątek bezpieczny przykład – Sergei

0

W swojej AppDelegate, jeden z obiektów gwarantowanych mieć tylko jeden instancji (Singleton) w całej aplikacji, można zadeklarować zmiennej instancji/nieruchomość: BOOL initialized;

a potem w viewDidLoad swojej UIViewController, ty ch eck, jeśli kod został zainicjowany; jeśli nie, to uruchomić kod i ustawić zmienną true:

if (!initialized) { 
    // Code goes here 
    initialized = true; 
} 
Powiązane problemy