Colección de citas famosas - Slogan de motivación - ¿Cuáles son las dificultades técnicas en las entrevistas de iOS?

¿Cuáles son las dificultades técnicas en las entrevistas de iOS?

1. ¿Qué es el arco? (¿Para qué problema se creó Arc?)

Primero, explique ARC: recuento automático de referencias.

Algunos arcos:

El recuento de retención es 1 cuando se crea el objeto y el recuento de retención es -1 cuando se libera el objeto. Cuando el recuento de retención llega a 0, el objeto se destruye.

El método Autorelease se agregará automáticamente al objeto al que se agrega el grupo de liberación automática en el programa. Si el recuento de referencias del objeto es 0, será destruido.

Entonces, ¿para qué problema nació ARC? Esto se remonta a los días de la gestión manual de la memoria MRC.

Desventajas de la gestión de memoria bajo MRC:

1. Cuando queremos liberar una memoria del montón, primero debemos asegurarnos de que se haya liberado el puntero que apunta a este espacio del montón. (Evite la liberación anticipada)

2. Para liberar el espacio del montón señalado por el puntero, primero determine qué punteros apuntan al mismo montón. Estos punteros solo se pueden liberar una vez. (Bajo MRC, quién crea y publica para evitar publicaciones repetidas).

3. En las operaciones modulares, los objetos pueden ser creados y utilizados por múltiples módulos, y no está claro quién los liberará eventualmente.

4. Cuando se utilizan varios subprocesos, no se sabe cuál se agotará al final.

2. Explique la diferencia entre las siguientes palabras clave: asignación frente a débil, _ _bloque frente a _ _débil.

Assign es adecuado para tipos de datos básicos, débil es adecuado para objetos NSObject, que es una referencia débil.

El _ _bloque se utiliza para modificar una variable, que se puede modificar en el bloque (consulte el principio de implementación del bloque).

__block: Las variables modificadas con __block se conservarán (ARC en código de bloque express (bajo ARC, no bajo MRC)).

__weak: Las variables modificadas con __weak no se retendrán en el bloque de código de bloque.

Al mismo tiempo, en ARC, debes evitar la referencia circular del bloque _ _ WeakTyped of (self) WeakSelf = self

3._ _ block under arc y no arco ¿Significa lo mismo?

No es lo mismo.

En MRC, las variables __block no se retienen cuando se usan dentro de un bloque.

Pero los _ _ bloques del arco se conservarán.

En su lugar, utilice __weak o __unsafe_unretained para describir con mayor precisión el propósito de las referencias débiles.

El primero solo se puede usar después de iOS5, pero es mejor (este puntero se establecerá automáticamente en cero después de que se suelte el objeto).

Esta última es una solución compatible con 4.x en un entorno ARC.

Entonces, en el ejemplo anterior,

_ _ bloquea mi clase * temp =…; // En el entorno MRC usa __weak MyClass* temp =… // ARC pero solo es compatible con iOS; 5.0 y superiores _ _ inseguro _ conservaron mi clase * temp =...; //ARC y es compatible con 4.x y versiones posteriores.

4. ¿El uso de subprocesos no atómicos es seguro? ()

Ese no es el caso.

Para operaciones atómicas atómicas, el sistema bloqueará el método setter. El uso de @synchronized(self){//code}

Nonatomic no bloqueará el método de establecimiento.

Atomic: seguro para subprocesos, requiere muchos recursos del sistema para bloquear propiedades.

No atómico: no seguro para subprocesos, adecuado para dispositivos móviles con poca memoria.

5. Describe un ejemplo de un ciclo de retención que hayas encontrado.

Referencia circular en bloque: viewController

@property (nonatomic, fuerte) controlador de solicitudes http * controlador; @property (nonatomic, fuerte) NSData * data_ handler = [controlador de solicitudes http compartido manager]; [downloaddata: ^ (id datos de respuesta] { _ data = datos de respuesta; }];

El propio _handler, el _handler es propietario del bloque y el bloque es propietario de uno mismo (debido al uso de los datos del propio _). atributo, por lo que el bloque copiará una copia de self)

Solución:

_ _Tipo débil de (self) self débil = self[downloaddata: ^(datos de respuesta de id ]{ self débil .datos = datos de respuesta;

6. carga (nulo); inicialización (nulo);

En Objective-C, ejecute dos métodos de cada clase se llama automáticamente. se llama a load cuando la clase se carga inicialmente, y se llama a inicialización antes de que se llame al método de clase o al método de instancia de la clase por primera vez. Estos dos métodos son opcionales y solo se llamarán cuando se implementen. se llama.

* * *Igual: ambos métodos solo se llamarán una vez

.