Red de conocimientos sobre prescripción popular - Enciclopedia de Medicina Tradicional China - Haga algunas preguntas sobre las pérdidas de memoria en el desarrollo de iOS. La memoria de la plataforma iOS utiliza un mecanismo de conteo de referencias e introduce un mecanismo de liberación semiautomático. Esta diversidad de uso hace que los desarrolladores sean muy propensos a sufrir pérdidas de memoria y un crecimiento inexplicable de la memoria en el uso de la memoria. Este artículo presentará los principios de uso de la memoria y las trampas de uso de la plataforma iOS. Un análisis en profundidad del mecanismo de liberación automática; el proceso de procesamiento después de una alarma de memoria insuficiente; combinado con sus propios ejemplos, presenta los registros de seguimiento de problemas de explosión de memoria y el uso de herramientas relacionadas en la plataforma iOS; de la plataforma iOS, ¿alguna vez ha tenido problemas de memoria? La memoria continúa creciendo inexplicablemente, los programas fallan inexplicablemente y las pérdidas de memoria son difíciles de encontrar. Estos son problemas comunes relacionados con la memoria en la plataforma iOS. Este artículo presentará en detalle el mecanismo de administración de memoria, el mecanismo de liberación automática y las trampas de uso de memoria de la plataforma iOS, resolverá la mayoría de los problemas en la memoria de la plataforma iOS y mejorará la estabilidad del programa. Se introdujo 1 gestión de memoria de la plataforma iOS. La gestión de memoria de la plataforma iOS utiliza un mecanismo de recuento de referencias. Cuando utiliza el método alloc o allWithZone al crear un objeto, el recuento de referencias será +1; cuando el objeto que se libera utiliza el método de liberación, el recuento de referencias será -1; esto significa que cada objeto realiza un seguimiento de cuántos otros; los objetos hacen referencia a él, y una vez que se hace referencia a él. Cuando el recuento es 0, la memoria del objeto se liberará. Además, iOS también proporciona un mecanismo de liberación retardada AutoRelease; De esta manera, no es necesario que el desarrollador libere manualmente la memoria de la aplicación y el sistema liberará la memoria en un momento determinado. Debido a la diversidad de administración de memoria en la plataforma iOS, los desarrolladores son propensos a sufrir pérdidas de memoria o fallas inexplicables del programa. Este artículo presentará en detalle las especificaciones y técnicas de uso de memoria en la plataforma iOS y cómo utilizar herramientas para evitar o encontrar problemas. 2. Principios de uso de la memoria en la plataforma IOS 2.1 Propiedad y destrucción de objetos 2.1.1 Quién crea y quién libera; si el objeto se crea con alloc, new o copy, mutableCopy, se debe llamar al método de liberación o liberación automática para liberar el objeto. memoria. Si no se publica, se producirá una pérdida de memoria. 2.1.2 Quien se quede será liberado; si se envía un mensaje de retención al objeto, su recuento de referencia será +1, y si no, se debe enviar el método de liberación o liberación automática para liberar la memoria o restaurar el recuento de referencia; liberado, causará fallas en la memoria ¡Cede! 2.1.3 No creado ni retenido, no libere objetos que no haya asignado o retenido usted mismo, de lo contrario el programa fallará; no libere objetos de liberación automática; de lo contrario, el programa fallará 2.2 Copia profunda y copia superficial de objetos; En términos generales, copiar un objeto implica crear una nueva instancia e inicializar la nueva instancia con los valores del objeto original. Es fácil copiar los valores de variables de instancia que no son de puntero, como números booleanos, enteros y de punto flotante. Hay dos formas de copiar variables de instancia de aguja. Un método se llama copia superficial, que consiste en copiar el valor del puntero del objeto original a la copia. Por lo tanto, el objeto original y la copia ** comparten los datos a los que se hace referencia. Existe otro método llamado copia profunda, que copia los datos a los que hace referencia el puntero y los asigna a la variable de instancia de la copia.

Haga algunas preguntas sobre las pérdidas de memoria en el desarrollo de iOS. La memoria de la plataforma iOS utiliza un mecanismo de conteo de referencias e introduce un mecanismo de liberación semiautomático. Esta diversidad de uso hace que los desarrolladores sean muy propensos a sufrir pérdidas de memoria y un crecimiento inexplicable de la memoria en el uso de la memoria. Este artículo presentará los principios de uso de la memoria y las trampas de uso de la plataforma iOS. Un análisis en profundidad del mecanismo de liberación automática; el proceso de procesamiento después de una alarma de memoria insuficiente; combinado con sus propios ejemplos, presenta los registros de seguimiento de problemas de explosión de memoria y el uso de herramientas relacionadas en la plataforma iOS; de la plataforma iOS, ¿alguna vez ha tenido problemas de memoria? La memoria continúa creciendo inexplicablemente, los programas fallan inexplicablemente y las pérdidas de memoria son difíciles de encontrar. Estos son problemas comunes relacionados con la memoria en la plataforma iOS. Este artículo presentará en detalle el mecanismo de administración de memoria, el mecanismo de liberación automática y las trampas de uso de memoria de la plataforma iOS, resolverá la mayoría de los problemas en la memoria de la plataforma iOS y mejorará la estabilidad del programa. Se introdujo 1 gestión de memoria de la plataforma iOS. La gestión de memoria de la plataforma iOS utiliza un mecanismo de recuento de referencias. Cuando utiliza el método alloc o allWithZone al crear un objeto, el recuento de referencias será +1; cuando el objeto que se libera utiliza el método de liberación, el recuento de referencias será -1; esto significa que cada objeto realiza un seguimiento de cuántos otros; los objetos hacen referencia a él, y una vez que se hace referencia a él. Cuando el recuento es 0, la memoria del objeto se liberará. Además, iOS también proporciona un mecanismo de liberación retardada AutoRelease; De esta manera, no es necesario que el desarrollador libere manualmente la memoria de la aplicación y el sistema liberará la memoria en un momento determinado. Debido a la diversidad de administración de memoria en la plataforma iOS, los desarrolladores son propensos a sufrir pérdidas de memoria o fallas inexplicables del programa. Este artículo presentará en detalle las especificaciones y técnicas de uso de memoria en la plataforma iOS y cómo utilizar herramientas para evitar o encontrar problemas. 2. Principios de uso de la memoria en la plataforma IOS 2.1 Propiedad y destrucción de objetos 2.1.1 Quién crea y quién libera; si el objeto se crea con alloc, new o copy, mutableCopy, se debe llamar al método de liberación o liberación automática para liberar el objeto. memoria. Si no se publica, se producirá una pérdida de memoria. 2.1.2 Quien se quede será liberado; si se envía un mensaje de retención al objeto, su recuento de referencia será +1, y si no, se debe enviar el método de liberación o liberación automática para liberar la memoria o restaurar el recuento de referencia; liberado, causará fallas en la memoria ¡Cede! 2.1.3 No creado ni retenido, no libere objetos que no haya asignado o retenido usted mismo, de lo contrario el programa fallará; no libere objetos de liberación automática; de lo contrario, el programa fallará 2.2 Copia profunda y copia superficial de objetos; En términos generales, copiar un objeto implica crear una nueva instancia e inicializar la nueva instancia con los valores del objeto original. Es fácil copiar los valores de variables de instancia que no son de puntero, como números booleanos, enteros y de punto flotante. Hay dos formas de copiar variables de instancia de aguja. Un método se llama copia superficial, que consiste en copiar el valor del puntero del objeto original a la copia. Por lo tanto, el objeto original y la copia ** comparten los datos a los que se hace referencia. Existe otro método llamado copia profunda, que copia los datos a los que hace referencia el puntero y los asigna a la variable de instancia de la copia.

2.2.1 El proceso de copia profunda consiste en crear un nuevo objeto con un recuento de referencias de 1 e inicializar el nuevo objeto con el valor del objeto anterior clase a * objA =[[class a alloc]init]; objB = [objA copy]; objB es un objeto nuevo, el recuento de referencias es 1, los datos de ObjB son iguales a los datos de objA Nota: objB debe liberarse; de ​​lo contrario, provocará una pérdida de memoria; 2.2.2 El proceso de copia superficial es que sin introducir un nuevo objeto, el recuento de referencias del objeto original es +1, por lo que Clase A * obja = [[Clase A Alloc]init]; ] ; Nota: objB debe liberarse para restaurar el recuento de referencias de objA; de lo contrario, provocará una pérdida de memoria. 2.3 Métodos de acceso a objetos 2.3.1 Declaración de atributos y declaración de variables Los tipos de atributos comunes incluyen solo lectura, asignar, retener y copiar, y el sistema generará automáticamente funciones set y get para variables con atributos declarados: solo lectura, no escritura; atributo: es el atributo predeterminado y se puede asignar directamente sin ningún problema de retención o liberación. Retener atributo: antes de la asignación, se aumentará el recuento de referencias del objeto original y se liberará el objeto original, y luego se realizará la asignación; ; Copiar atributo: el objeto original se copiará antes de la asignación. Libere el objeto original y luego asigne el valor. 2.3.2 Peligros potenciales causados ​​por el uso de declaraciones de atributos. Cuando una variable que no es de puntero usa el atributo de retención (o copia); no liberar explícitamente la variable; simplemente deje la variable en blanco; de lo contrario, es fácil provocar una liberación excesiva y provocar que el programa falle, por ejemplo, el strName de ClassA es una variable de tipo NSString* y el atributo declarado es. retenerClassA.strName = nil/*liberar el objeto original y asignar el valor nulo al objeto*/[class a . strname release];/* Es posible que se haya liberado la memoria de strName, lo que provocará que el programa se bloquee */The Assign El atributo se utiliza cuando generalmente es una variable que no es puntero (tipo booleano, entero, etc.). ); pertenece al tipo de asignación directa y no necesita considerar la retención y liberación de memoria; si una variable de tipo puntero usa un atributo de tipo de asignación, es posible hacer referencia a la variable liberada, por ejemplo: classb * obj = [[[classbaloc] init] liberación automática] ... class a . strname = obj; /* strName apunta a la dirección de memoria detrás de obj */. la memoria de obj puede haberse reciclado; causando invalidez Referencia de memoria, falla del programa 3 problemas comunes con el grupo de lanzamiento automático de la plataforma iOS 3.1. Cuando está desarrollando programas de iOS, ¿alguna vez ha encontrado un aumento inexplicable en la memoria cuando se desliza la lista, un aumento inexplicable en la memoria cuando se accede con frecuencia a las imágenes, un aumento inexplicable en la memoria cuando la base de datos se abre y cierra con frecuencia... Estos son todo debido al mecanismo de liberación automática de IOS. El análisis específico es el siguiente: 1: La memoria aumenta inexplicablemente al deslizar la lista. Las razones pueden ser: 1: El mecanismo de reutilización de UITableView no se utiliza cada vez que se muestra una celda. , alloc se reasigna en forma de liberación automática, lo que hace que la memoria de la celda aumente continuamente; 2. Cada celda mostrará una UIView separada y se producirá una pérdida de memoria en la UIView, lo que hará que la memoria de la celda continúe creciendo; Cuando se accede con frecuencia a las imágenes, la memoria crece inexplicablemente; el acceso frecuente a las imágenes de la red hace que la API interna de iOS asigne continuamente buffers en modo de liberación automática para manejar la decodificación y visualización de imágenes utilizando el almacenamiento en caché de imágenes; se abre y se cierra con frecuencia, lo que resulta en un crecimiento continuo de la memoria; cuando SQLite se abre y se cierra con frecuencia, los buffers de datos de lectura y escritura son más grandes. SQLite asignará 51K de memoria mediante liberación automática cada vez que se abra y cierre.