ios xcode performance storyboard

ios - Demasiadas vistas en el guión gráfico: Xcode ejecuta lento



performance storyboard (7)

Estoy ayudando a alguien con un proyecto xcode, pero es casi imposible. Tienen alrededor de 100 controladores de visualización en su guión gráfico y se está ejecutando realmente lento. He seguido todas las guías para hacer que Xcode sea más rápido, pero no ayudan en esta situación. Fuera de ese guión gráfico, cuando trabajamos en los archivos .h y .m funciona perfectamente bien, solo dentro del guión gráfico se ejecuta lentamente. ¿Alguien ha tenido alguna experiencia con un proyecto como este? ¿Qué hiciste? ¿O qué puedo hacer para que sea posible trabajar en el guión gráfico? Gracias


Estamos teniendo el mismo problema, y ​​los ajustes de rendimiento comúnmente recomendados no ayudaron. En una MacBook Pro con SSD, veo que la utilización de la CPU llega al 80-90% cuando está en la vista del guión gráfico y el desfase de navegación es increíblemente frustrante. El simulador puede demorar hasta un minuto en mostrarse, y Xcode a menudo no se cierra, lo que requiere que se cierre la fuerza.

Todos estos síntomas desaparecen si no se visualiza el guión gráfico, o si el guión gráfico está abierto como código fuente.

ACTUALIZACIÓN: Dividimos nuestro proyecto en varios guiones gráficos, y la vida vuelve a ser buena: la utilización de la CPU vuelve a ser de un solo dígito y el rendimiento está a la par con Xcode 4.6.3. Definitivamente hay un problema con los storyboards más grandes; el único cambio realizado en nuestro código en el proceso fue actualizar las referencias al guión gráfico principal a una llamada a storyboardWithName.

Uno de los controladores de vista en nuestro proyecto tiene una vista de contenedor, y parecía que el problema de utilización se detuvo cuando ese controlador y su vista de contenedor se movieron a un guión gráfico separado. Puede haber sido una coincidencia, y hemos separado el resto del guión gráfico por coherencia, pero si tuviera que lidiar con este tema nuevamente, primero movería cualquier controlador de vista con vista de contenedor a un guión gráfico separado.


Estoy enfrentando el mismo problema. Masivamente frustrante. Mi guión gráfico tiene solo 41 visitas. Y estoy ejecutando un Mac Min i7 corriendo a 2.3Ghz. Con el guión gráfico abierto, lleva años realizar tareas muy simples como mover un UILABEL? Luego, en la vista de contraparte, el código de edición es como estar de vuelta en un ZX81. Está muy bien y es bueno golpear la "inteligencia" en el guión gráfico, pero no a costa de la eficiencia del desarrollo. En cuanto a las pautas de "tamaño" del guión gráfico, nunca recuerdo haber leído que los guiones gráficos tienen que dividirse más allá de cierto tamaño. Tal vez necesito leer más.

Para realizar los cambios necesarios, es decir, dividir el guión gráfico, aplicar algunos VC en varios guiones gráficos, requerirá un poco de faff. Supongo que si esa es la nueva mejor práctica, bien. Pero podría hacer algo más que conjeturas.


Mi solución es: abrir una nueva ventana del Storyboard y minimizarla. Por lo tanto, permanece en la memoria RAM y no se volverá a cargar. Trabajar con el guión gráfico ahora es rápido y fácil.


Quería agregar que estaba teniendo un problema con mi storyboard respondiendo lentamente al utilizar una vista de contenedor con un controlador de navegación dentro. Incluso traté de ponerlo en su propio guión gráfico y todavía era tan lento que ni siquiera podía usarlo. Parece que cuando la vista del contenedor cambiaba el tamaño del controlador de navegación, la barra de navegación estaba causando el problema.

Pude evitar este problema seleccionando el controlador de navegación en el guión gráfico, ocultando la barra de navegación al quitar la marca de "muestra la barra de navegación" en el inspector de atributos y usar "isNavigationBarHidden = false" en viewDidLoad o viewWillAppear de mi clase de controlador de vista.


Si está utilizando Xcode 7, las referencias a Storyboard son una manera rápida de crear múltiples guiones gráficos y definitivamente ayudarán a resolver este problema. ¡El mejor aspecto del uso de las referencias de Storyboard es que no implica ningún código adicional! Consulte el enlace a continuación para obtener una descripción completa de cómo configurarlo.

https://.com/a/30772789/3316842


También estoy de acuerdo con organizar tus puntos de vista en múltiples tableros de historias. Resulta muy útil cuando tiene una vista que se llama desde varias otras vistas. Entonces el guión gráfico puede volverse como pasta, poco claro. En mi caso, tenía una vista de cámara que podía ser llamada desde varias vistas, puse esto en un nuevo guión gráfico y esto funciona muy bien. Dado que la vista de la cámara también apuntaba a la vista de orden de búsqueda, tuve que poner la vista de orden de búsqueda también en un guión gráfico separado. Una vez más, mi story board principal se hizo más simple.

Así que tenga un story board principal, y separe todo lo que pueda en storyboards separados. Hice una clase general de StoryBoardNavigation donde centralicé todas las funciones para llamar a storyboards secundarios.

Aquí hay un ejemplo de esto:

Esta función navega hacia el guión gráfico llamado OrderLookupStoryboard y abre la vista en posición de inicio.

+(void) NavigateToOrderLookupFrom:(UIViewController *)vc { UIStoryboard * sb = [UIStoryboard storyboardWithName:@"OrderLookupStoryboard" bundle:nil]; UIViewController * vcTo = [sb instantiateInitialViewController]; [UIView transitionWithView:vc.view duration:0.8 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{ [vc.navigationController pushViewController:vcTo animated:NO]; } completion:NULL]; }

Esta función pasa algunos parámetros al guión gráfico.

+(void) NavigateToCameraFrom:(UIViewController *)vc WithSelectedZone:(int)selectedZone { UIStoryboard * sb = [UIStoryboard storyboardWithName:@"CameraStoryboard" bundle:nil]; MediaCapture * vcTo = [sb instantiateInitialViewController]; vcTo.selectedZone = selectedZone; vcTo.zoneSet = YES; [UIView transitionWithView:vc.view duration:0.8 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{ [vc.navigationController pushViewController:vcTo animated:NO]; } completion:NULL]; }

Esta función abre la vista en el estilo de transición del módulo:

+(void) NavigateToSignatureFrom:(UIViewController *)vc withSignee:(NSString *) Signee { UIStoryboard * sb = [UIStoryboard storyboardWithName:@"SignatureStoryboard" bundle:nil]; UIViewController * vcTo = [sb instantiateInitialViewController]; ((SignatureVC *) vcTo).Signee = Signee; [vcTo setModalTransitionStyle:UIModalTransitionStylePartialCurl]; [vc presentViewController:vcTo animated:YES completion:nil]; }


Enfrenté el mismo problema cuando estaba trabajando en una aplicación empresarial. En el proyecto, solo tenía un storyboard y todas las vistas en un solo guión gráfico. Al abrir el guión gráfico, Xcode se volvió muy lento.

Así que dividí el guión gráfico en múltiples guiones gráficos a modo de módulo y cargué un guión gráfico por módulo, como en el siguiente código:

Si quiero presionar un controlador de vista:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"storyboardName" bundle:nil]; UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"Members_ViewController"]; [self.navigationController pushViewController:viewController animated:YES];