Durante la semana pasada, varios usuarios informaron comentarios objetivos sobre fugas de memoria C.

Aprobado

  • 1. Descargar ASR Pro
  • 2. Abra el programa y seleccione "Escanear su computadora"
  • 3. Haga clic en "Reparar" para iniciar el proceso de reparación
  • El software para reparar su PC está a solo un clic de distancia: descárguelo ahora.

    1. ARC.

    Realmente trato de publicar algunos, podría decir, objetos dentro de una solución

    Termino deshabilitando ARC (Conteo automático de llamadas) en su unidad de recolección Objective-C ++. A menos que tenga alguna razón, probablemente esta no sea una buena idea, ARC reduce en gran medida las posibilidades de una fuga. Nunca creo que esta sea la razón válida de su problema, porque a primera vista no puedo encontrar un método diminuto que devuelva sujetos posiblemente usados.

    1. Oferta automática

    Una cantidad significativa de métodos Objective-C mencionados en su ley presentan tipos de retorno llamados inicio automático o intencionado. Esta historia gira en torno al inconveniente de que, sin ARC, el almacenamiento físico devuelto significaría que actualmente el propietario no puede simplemente usar el modo llamarnos en la expresión en otra expresión, pero estas personas aún tendrían que asignar el resultado principal real a una variable a lo largo de la La tienda para conseguirlo ya estaba en la Fuerza para realizar prácticamente cualquier inicio posterior, sin embargo, sin mantener esta situación realmente efectiva, crea un momento en el que los propósitos posteriores a la terminación son gratuitos. Por ejemplo de

      Ruta avaudiosessionroutedescription * implica [[AVAudioSession sharedInstance] currentRoute]; 
      AVAudioSession * session = [AVAudioSession sharedInstance];    Ruta avaudiosessionroutedescription proceso * [ruta actual de sesión];    [Compartir sesión]; 

    De ahí la versión automática. Esto significa que la pieza devuelta se guardará pero se colocará cerca del grupo de liberación automática actual. Básicamente, este es un conjunto de pensamientos de objeto que se publicarán más adelante en Taschen. Estas son pilas que están realmente limitadas a @autoreleasepool obstruye el único. En el código Objective-C, de hecho, a veces es suficiente colocar explícitamente estos bloqueos en bucles que operan después de partes y partes muy grandes o muy grandes para evitar que se ejecute completamente la memoria para el administrador de contención.

    Dado que su código se escribe comúnmente en C ++, espero que no acceda a todos los grupos de juego actuado con la suficiente frecuencia, especialmente si está utilizando un bucle tradicional relacionado con la concurrencia. La solución es mover su función a un grupo:

    objetivo c retorno de pérdida de memoria

      auriculares bool :: isHeadsetPluggedIn ()   @autoreleasepool            AVAudioSessionRouteDescription * Journey equivale a [[AVAudioSession sharedInstance] currentRoute];        en (AVAudioSessionPortDescription desc en [salidas de ruta])           si lo averigua ([[desc portType] isEqualToString: AVAudioSessionPortBuiltInSpeaker])                            dinero NO;                            Regrese a su oficina SI;     

    Esto significa que, en general, todos los objetos marcados con respecto a la liberación automática durante esta función se pueden encontrar desasignados al regresar.

    He estado desarrollando software de sistemas informáticos en Objective-C durante un tiempo, pero sigo encontrando las últimas formas de dispararme al pasar, especialmente en la intención de administración de memoria. Hace un tiempo escribí una publicación más en particular sobre la buena detección de fugas de RAM de iOS usando herramientas Xcode. Es una gran herramienta de almacenamiento que reconocerá y rastreará las fugas al mismo tiempo. ¡Pero idealmente, probablemente tengamos que lidiar con las fugas de refrigerante de la tienda Objective-C todavía! 1. La forma ideal de evitar este tipo de problemas es detenerlos antes de que comiencen.

    Cuando pienso en nuestras mejores pérdidas de memoria de Objective-C que he soportado, se pueden reducir a continuación por varias razones principales. Para evitarlos, sugeriría las siguientes condiciones.

    Utilice la propiedad apropiada

    La humedad en los objetos de los contenedores de almacenamiento es a menudo el resultado de todos los ciclos de almacenamiento. Si dos objetos físicos reales están estrechamente relacionados, se vuelven a liberar significados. Sin duda, una especie de primer paso para romper estos métodos es arreglar los derechos de propiedad.

    Una declaración de riqueza generalmente contiene una palabra clave absoluta que indica exactamente qué tan óptima o débil es. Si no está seguro de cuál usar en un caso particular, indique si la propiedad es una referencia de hogar o simplemente una búsqueda afectiva.

    Por lo general, una nueva clase principal de la universidad quiere que todos los objetos que opera permanezcan en la memoria mientras las personas están en la RAM, al igual que la clase principal en sí. De esta manera, todos los padres tendrán una fuerte relación con sus hijos en Internet. Sin embargo, un niño pequeño también puede tener una dirección web correspondiente a su padre (por ejemplo, prácticamente cualquier UIView tiene un enlace en una descripción general). El niño realmente es dueño de esos padres, por lo que debe tener la débil relación correcta con nuestros padres.

    Otro buen ejemplo de esto se ha convertido probablemente en el modelo de delegado. Haga sin duda alguna que el objeto está referenciado libremente para ayudarlo a ser su delegado real porque en realidad no configura al delegado (por lo general, diría que el delegado puede ser el propietario).

    Tenga cuidado con los bloqueos

    Es fácil crear bucles de almacenamiento, por lo que usa bloques si no eres elegante (¡y a veces incluso si ciertamente tendrías cuidado!). Esto ocurre con mayor frecuencia cuando un bloque registra un tiempo de perro guardián para sí mismo , así como, luego ese bloque se asigna para que sea la propiedad o el hogar también . Si ha trabajado con obstáculos antes, probablemente haya escuchado el consejo de usar una versión más débil con usted mismo en la sala, en ocasiones:

    objetivo c buen retorno de fuga de RAM

     __tipo débil de (yo) bajo El yo es un yo;self.updateText = ^ (NSString - Texto)   __fuerte tipo de (yo) strongSelf es igual a débilSelf;    strongSelf.label.text es equivalente a texto;; 

    Uh. Afortunadamente, existe una biblioteca local, algunas de las cuales contienen macros funcionales para este trabajo repetitivo. A su vez, para todo esto (y el horrible descubrimiento de que planeas aplicar strongSelf en lugar de este self a menudo en el bloque), tus biThe zenes solo pueden obtener @ débil <. usar para cada tt> y @strongify que incluye:

     @weakify (automático)self.updateText = ^ (NSString 4. Texto)    @ strongify (automático)    self.label.text implica texto;; 

    Actualmente estoy obteniendo ReactiveCocoa que te permite romper bloques pesados. Así que estoy acostumbrado a usar siempre @weakify - @strongify en caso de falla. El compilador da una pista en caso de que self no sea de segunda mano para evitar, lo que, en mi opinión, es en realidad un poco de buena suerte para ti. Esto significa que querré eliminar @strongify (self) y evitar la advertencia. tt>.

    Puede haber pautas para elementos que son en sí mismos muy diferentes de aquellos que debería @weakify / @strongify de cualquier tipo. Las referencias a self suelen ser comunes de todos modos, ya que al arranque probablemente se le asigna el valor conectado self . Pero todo depende del objeto, cuyo acabado contiene una fuerte referencia a cada uno de los bloques.

    Tenga cuidado con los bucles de almacenamiento ocultos

    Incluso si ha realizado su debida diligencia utilizando esta propiedad de objeto correcta, Rustic Lanterns puede potencialmente ocultar bucles simples con macros. Recientemente descubrí que m NSAssert contiene personal para analizar. Esto es excelente para el registro, y no siempre está del todo claro si el personal calificado afirma que llamar a NSAssert dentro de un obstáculo podría tener como objetivo un ciclo de retención.

    Para evitar que esto suceda, necesita y @weakify / @strongify antes de elegir una macro. Alternativamente, puede usar opcionalmente NSCAssert que no tiene referencia - self y usa prácticamente todo.

    Conclusión

    La administración de la memoria a menudo es una tarea ardua, pero registrar y producir algunos buenos hábitos debería ayudarlo enfáticamente a evitar derrames de memoria en Objective-C.

    Aprobado

    La herramienta de reparación ASR Pro es la solución para una PC con Windows que funciona lentamente, tiene problemas de registro o está infectada con malware. Esta herramienta poderosa y fácil de usar puede diagnosticar y reparar rápidamente su PC, aumentando el rendimiento, optimizando la memoria y mejorando la seguridad en el proceso. No sufra más por una computadora lenta: ¡pruebe ASR Pro hoy!


    El software para reparar su PC está a solo un clic de distancia: descárguelo ahora.