Soy nuevo en el Objetivo C. tengo conocimientos básicos en C, incluyendo el concepto de punteros. Tengo dos preguntas básicas:

  1. Alguien puede explicar la diferencia entre ceder,copiar, y retener con cierta analogía?
  2. ¿Cómo manejar una función que devuelve una variable de puntero, y ¿cómo se puede realizar de mensajería a través de un puntero de retorno?
InformationsquelleAutor Sabha B | 2010-12-22

4 Comentarios

  1. 118

    Respuesta actualizada para Cambiar la Documentación

    La información está dispersa en varios guías en la documentación. Aquí está una lista de lectura obligatoria:

    La respuesta a esta pregunta depende enteramente de si usted está usando un ARCO aplicación que gestiona (la moderna predeterminado para nuevos proyectos) o forzar el manual de gestión de la memoria.

    Asignar vs Débil Uso asignar para establecer una propiedad del puntero a la dirección del objeto sin la retención de una o de otra manera comisariado; usar débil que tienen la propiedad de punto nulo automáticamente si el objeto asignado a la que se cancela la asignación. En la mayoría de los casos, usted querrá usar débil así que usted no está tratando de acceder a una cancela la asignación de objeto (acceso ilegal a una dirección de memoria – «EXC_BAD_ACCESS«) en caso de no realizar la limpieza correcta.

    Retener vs Copia – Declaró propiedades de uso retener por defecto (por lo que simplemente puede omitir por completo) y se encargará de gestionar el recuento de referencia del objeto automáticamente si el otro objeto se asigna a la propiedad o conjunto nulo; Uso copia para enviar automáticamente la ha asignado recientemente objeto de una -copy mensaje (que va a crear una copia del objeto pasado y asignar esa copia a la propiedad lugar – útil (requerido) en algunas situaciones donde el objeto asignado puede ser modificado después de ser establecido como una propiedad de algún otro objeto (lo que significaría que la modificación/mutación se aplican a la propiedad).

    • Gracias tio me lea el fundamentos de Apple Dev , en mi desarrollo Teniendo un momento difícil en la gestión de la memoria «se estrelló en objc_msgSend()» de Modo que solo el pensamiento de la revisión de mi entendimiento en propiedades. stackoverflow.com/questions/4506205/…
    • Sólo las cabezas para arriba, el enlace en la respuesta va a un genérico de «Página no encontrada» en las manzanas sitio. A continuación, se le redirige a la «Mac Developer Library» Este ASÍ que la respuesta tiene información útil: stackoverflow.com/questions/2255861/…
    • Tipo de difícil actualizar debido a que la documentación ha cambiado y ya no es en un lugar conveniente. Retroalimentación enviada a Apple doc equipo.
  2. 31

    La Memoria De Gestión De La Guía De Programación desde el iOS de Referencia de la Biblioteca ha fundamentos de ceder, copiar, y retener con analogías y ejemplos.

    copia
    Hace una copia de un objeto, y la devuelve con conservar el valor 1.
    Si se copia un objeto, propia de la copia. Esto se aplica a cualquier método que contiene la palabra copia, donde «copia» se refiere al objeto que se devuelve.

    retener Aumenta el retener a cuenta de un objeto 1. Tiene la propiedad de
    un objeto.

    liberación Disminuye el retener a cuenta de un objeto 1. Renuncia
    la propiedad de un objeto.

    • Gracias por su respuesta.Podría por favor explicar 1.ClassA tienen una propiedad llamada – (Clase B*)functionName; 2.ClassB de disponer de un método – (void)setHeight; 3.ClassC interfaz me han declarado ClassA *tempA como a conservar. 4.Class implementación en C en el constructor tengo esta declaración ClassB *tempB = tempA.functionName; 5.Cuando trato de enviar un mensaje (tempB. setHeight;) en la siguiente línea de tempB de inicialización de mi programa funciona bien.
    • 6.poniendo la misma instrucción(tempB. setHeight;) en algunas de las funciones y llamar a la misma función de mi programa se Estrelló en objc_msgSend().
  3. 7
    NSMutableArray *array = [[NSMutableArray alloc] initWithObjects:@"First",@"Second", nil];
    NSMutableArray *copiedArray = [array mutableCopy];
    NSMutableArray *retainedArray = [array retain];
    
    [retainedArray addObject:@"Retained Third"];
    [copiedArray addObject:@"Copied Third"];
    
    NSLog(@"array = %@",array);
    NSLog(@"Retained Array = %@",retainedArray);
    NSLog(@"Copied Array = %@",copiedArray);
    
    array = (
        First,
        Second,
        "Retained Third"
    )
    Retained Array = (
        First,
        Second,
        "Retained Third"
    )
    Copied Array = (
        First,
        Second,
        "Copied Third"
    )
    • Un entorno explicación seriamente en mejorar su respuesta.
  4. 4
    1. asignar

      • asignar un valor predeterminado de la propiedad de atributo
      • asignar es un atributo de la propiedad indica al compilador cómo sintetizar la propiedad del setter aplicación
    2. copia:

      • copia es necesaria cuando el objeto es mutable
      • copia devuelve un objeto que debe liberar explícitamente (por ejemplo, en dealloc) en la no recolección de los entornos de
      • que usted necesita para liberar el objeto cuando haya terminado con él, porque se conserva la copia
    3. retener:

      • especifica el nuevo valor debe ser enviado «-retener» en la asignación y el valor antiguo enviado «liberación»
      • si usted escribe retener el auto de trabajo como fuerte
      • Métodos como el de «asignación» implícita una «retener»

Dejar respuesta

Please enter your comment!
Please enter your name here