¿Por qué el ARCO no es la cancelación de la asignación de memoria después de popViewController

Estoy empujando y haciendo estallar ViewControllers en UINavigationController.

Estoy de seguimiento del consumo de memoria de la aplicación.
Mientras empuja la nueva viewController el consumo de memoria está aumentando gradualmente, pero cuando estoy haciendo estallar el mismo ViewController utilizando [self.navigationController popViewControllerAnimated:NO]; el consumo de memoria no disminuye, pero la constante.

Particular viewController puede ser empujado y se metió por el usuario muchas veces que puede conducir el alto consumo de memoria de la aplicación en la memoria RAM.

¿Qué debo hacer para optimizar mi consumo de memoria?

  • ¿El viewController del dealloc se llama después de que se salió.
  • Yo no comprobarlo me permiten comprobar de primera
  • sí su llamada, ya que el objeto no está vivo después de popViewController llamada
  • Así que si dealloc llamadas, usted cancelación de la asignación de sus recursos en ella? por favor, puedes mostrar el código para dealloc ?
  • yo no se usted,debo necesario implementar el método dealloc?,porque he comprobado que en el instrumento que el objeto no está vivo.
  • usted debe implementar el método dealloc sólo si se tienen los recursos para la liberación. Si no la liberación de ellos, se fuga.
  • todavía me estoy enfrentando el mismo problema aquí es mi código -(void)dealloc { NSArray *subvistas = [self.ver subvistas]; for (int i = 0; i <subvistas.count; i++) { UIView *Subvista=[subvistas objectAtIndex:i] ; [Subvista removeFromSuperview]; Subvista = Nil; } }
  • Si dealloc se llama entonces el problema no es de tu controlador de vista. ¿Qué instrumentos decir que la memoria se utiliza para? Buscar heapshot análisis. Estás buscando vivir bytes o total de bytes?
  • en realidad estoy usando splitView controlador,en didSelectRowAtIndex de masterViewController de la mesa cada vez que estoy creando un scrollView en DetailViewController y otra vez que scrollView contiene muchos subvistas como etiqueta y campos de texto que se está llevando a la memoria.Ahora, cuando me voy de regreso es decir, popViewController, a continuación, la memoria no se suelte, ¿qué actitud debo usar.me quedé con ella, incluso trató de manejar la memoria sin ARCO decir -fno-objc-arc.pero todavía me estoy enfrentando el mismo problema.
  • Puedes mostrar el código donde puede seleccionar la celda de la tabla y cuando regrese?
  • – (void)formato tableview:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { //borrar el último desplazamiento de la vista si es que no si (auto.scrollView) { [auto.scrollView removeFromSuperview]; auto.scrollView = nil; } //método de llamada para crear la Vista NSString *cadena id = [self.StepId objectAtIndex:indexPath.fila]; [self createViewForTheSelectedCel:cadena id]; }
  • CreateViewForSelectedCell crea scrollView agregar muchas etiquetas y textField en que y hace que el desplazamiento de la vista de la subvista de detailViewController.
  • es su viewController se conoce como delegado en cualquier otra clase y delegado tienen fuertes de la propiedad?
  • no no es referida como delegado en cualquier otra clase de @AkshayNalawade
  • Eres el almacenamiento de sus controladores de navegación en cualquier lugar? en un NSArray o NSDictionary o en cualquier otra colección. Parece ser que está manteniendo una fuerte referencia a ellos.
  • sí, yo soy de almacenarlos en un array yo.e auto.splitViewController.viewControllers=[NSArray arrayWithObjects:auto.rootNav,auto.detailNav,nil];
  • Desde la matriz se conservan los de la vista de los controladores, aunque el pop no serán liberados. Intente quitar la vista del controlador de la matriz cuando el pop controlador de vista de la navegación controlador. A ver si esto reduce el consumo de memoria.
  • ¿has intentado que mi sugerencia?
  • ¿Compilación utilizando el analizador? Que puede convertir los problemas a veces.
  • Usted debe hacer una prueba. Deshabilitar el ARCO para que el particular punto de vista y mantener el ojo de águila sobre la memoria y el reloj de la conducta si es el mismo o no

InformationsquelleAutor wali naqvi | 2014-01-28

8 Kommentare

  1. 11

    Al descartar una vista controlador (o pop), se cancela la asignación de que si no lo hacen fuertes punteros a ella (que controlador es retenida por el controlador de navegación o la presentación de controlador de vista, por lo que normalmente no es necesario tener un puntero a ella en el momento de crear y empuje o presente).

    Va a ser puesto en libertad si no hay ningún otro fuerte punteros a

    • Mientras correcta, no creo que este es el punto. A pesar de que el controlador se desasigna hay veces cuando el uso de memoria no disminuye incluso con los cops, como en la pregunta.
    • Echa un vistazo a «abandonados de la memoria» y cómo encontrarlo. No es lo mismo como fugas. developer.apple.com/library/ios/recipes/…
    • como estoy usando navi controlador demasiado, pero tengo una lista de las páginas que se manejan en ella, que pone mucha carga en la pila, la cual se produce la falla en el final, hay alguna forma o técnica de conexión de la pila de carga
  2. 4

    Intentar evitar el uso de fuertes propiedades para IBOutlets.

    • Por qué? Débil de comunicación fueron relevantes en iOS5, cuando las opiniones obtendría descargado, pero no va a causar problemas de ahora.
    • Que significa que no habrá ninguna diferencia si declaramos un IBOutlet como fuerte o débil de la propiedad en el ARCO posterior de iOS 5?
    • Interesados en su punto @jrturton, es esta documentado en ninguna parte? También, ¿por qué usar una fuerte propiedad de ahora, en lugar de los débiles, de todos modos?
    • Fuerte es el valor predeterminado, ¿por qué el extra? El punto débil de las propiedades era que iban a ser el atributo nillable cuando la vista se ha descargado. La vista no obtener descargado ya, así que no hay ningún punto. No sé de donde esto está documentado.
    • Apple dice que «Salidas deben ser, en general weakAquí está la documentación.
    • Esta es obsoleto ahora. Desde iOS 7, estoy usando IBOutlets tan fuerte y no hace ninguna diferencia.

  3. 2

    Si el diseño de la aplicación permite que el usuario de push y pop el mismo controlador de vista una y otra vez, es posible que desee mirar a la reutilización de la misma vista controlador y acaba de actualizar su contenido cada vez que se inserta.

    Lugar de crear y destruir una y otra, crear, configurar sus contenidos y empuje, cuando apareció, mantenerlo alrededor listo para ser mostrado de nuevo. La próxima vez que necesita ser demostrado, la actualización de sus contenidos y, a continuación, empuje de nuevo.

  4. 2

    Me gustaría decir, que mis últimos días los pasó a buscar en la web para mi problema de memoria de la aplicación. Yo era de conmutación entre 2 UIViewControllers. Uno de ellos tenía un desplazamiento de la vista, que mantuvo a todos los subvistas en él. Resultó que UIVC carga un nuevo desplazamiento de la vista sin soltar la anterior. Me tomó varias horas para darse cuenta de ello.

    Lo que yo hice fue:

    Buscando cualquier tipo de interbloqueos dentro de la aplicación, a continuación, buscando para cada una de las variables que tuvieron un fuerte atributte y otras medidas desesperadas. Pero lo que realmente funcionó fue:

     @IBAction func backBB(sender: UIBarButtonItem) {
        collectionView.removeFromSuperview()
        self.frontView.removeFromSuperview()
        eventsPhotos.removeAll(keepCapacity: false)
        symbolContainerView.removeFromSuperview()
        self.myScrollView.removeFromSuperview()
        dismissViewControllerAnimated(true, completion: {})
    }

    Que se elimine manualmente algunas opiniones y contenidos. Yo lo he hecho en el botón «Atrás», pero usted puede hacer esto en otros métodos como el de viewWillDisappear(animado: Bool).

    Una vez que hice esto, mi asignación gráfico en el desarrollador de instrumentos mostraron la asignación de memoria que va arriba y abajo… Y fue resuelto…

    • Aunque lo resolviste para sus necesidades personales, que no parece ser una solución limpia. Creo que hay algo más profundo clave que necesita ser resuelto.
  5. 1

    Creo que obtenga un error, al intentar meter el controlador de vista, porque la navegación controlador no tiene una referencia válida para el controlador de vista, fue liberado después de la empujó.

  6. 0

    Nil la ventana emergente en descartar.

    [menuPopup_ dismissPopoverAnimated:YES];
    menuPopup_ = nil;
    • La pregunta no se refiere a una ventana emergente.
    • ¿Por qué esta respuesta?
  7. 0

    Asegúrese de que su viewcontroller (A) no tiene ninguna referencia de cualquier otro viewcontroller (B) o cualquier objeto. En caso que se tiene, a continuación, asegúrese de que VC-B es no hacer referencia de nuevo VC-A. Si tiene alguna referencia de nuevo a VC-UN, a continuación, hacer un débiles de la propiedad. De lo contrario, fuerte retener el ciclo se mantenga la VC en la memoria, incluso si sus apareció.

    • Otra cosa es comprobar si los theres ningún cierre en su VC, compruebe su cuerpo, si no es con referencia a cualquier método o propiedad con el auto, a continuación, hacer un Lista de captura para evitar retener ciclo como «Cierres son Tipos de Referencia«
    • Comprobar si los theres ningún NSNotification observador que no están liberando

    • Hacer una impresión de llamada en deinit método para comprobar si su desasignado.

    Para la comprensión de la gestión de la memoria:

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea