2012-04-04 21 views
5

Tengo una aplicación de iOS. La aplicación tiene 2 vistas diferentes: Principal y Configuración. De hecho, la aplicación necesita cargar e inicializar una biblioteca y un marco antes de que se use en la Vista principal.Función de iOS que se debe llamar una vez (cuando se inicializa la aplicación)

Cuando puse esta inicialización en el método viewDidLoad, funciona bien. Pero cuando vaya a Configuración y regrese a la Vista principal, la inicialización comienza de nuevo, que no es lo que quiero, y la aplicación da como resultado un problema de memoria.

Necesito un método que se llame una vez cuando se inicia la aplicación. ¿Alguna idea?

EDIT: Cambié a la vista con pestañas. Carga vistas una vez. Esta es otra solución.

Respuesta

7

Uso ésta:

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

Debe estar en su clase AppDelegate.

creo que sirve

+0

Pero para su aplicación de inicio rápido se debe evitar r desatando grandes hilos dentro de 'didFinishlaunchingWithOptions' – iDroid

+1

Estoy de acuerdo con @chiLLer. Necesito un método para llamar dentro de ViewController. – mert

+1

Querías decir el inicio inicial de tus aplicaciones, solo tienes que inicializar las cosas correctamente. si lo haces dentro del 'viewDidLoad', obviamente se solicitará cada vez que lo cargues. Aquí todo lo que necesitas es recordar si lo has abierto o no. para esto puede mantener un par de valores clave plist o NSUserDefault o incluso una variable global en 'appDelegate' para recordar el estado .... – iDroid

28

estado usted en uno de sus comentarios que usted no desea poner este código en application:didFinishLaunching y desea mantenerlo en viewDidLoad. Puede utilizar este fragmento para ejecutar el código sólo la primera vez que se invoca:

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

El bloque interno solamente se ejecutará una vez. Si la vista se carga de nuevo, no se llama al bloque. Tenga en cuenta que hay un fragmento de código de Xcode para este que se puede acceder al empezar a escribir dispatch_once en el editor:

enter image description here

enter image description here

+0

Muy buena respuesta @Mike Weller – iDroid

+0

Gracias por el ejemplo seguro de subprocesos – Sergei

0

En su AppDelegate, uno de los objetos de la garantía de tener una sola instancia (Singleton) a lo largo de la aplicación, se puede declarar una variable de instancia/propiedad: BOOL initialized;

Y luego, en viewDidLoad de su UIViewController, que CH Eck si es el código ha sido inicializado; si no, a continuación, ejecutar el código y establecer la variable a cierto:

if (!initialized) { 
    // Code goes here 
    initialized = true; 
} 
Cuestiones relacionadas