Colección de citas famosas - Slogan de motivación - ¿Qué significa el reconocimiento dinámico de ios oc?

¿Qué significa el reconocimiento dinámico de ios oc?

1. ¿Se pueden heredar las clases en Objective-C varias veces? ¿Puedo utilizar múltiples protocolos?

Respuesta: No se permite la herencia múltiple y se pueden utilizar múltiples protocolos.

2. ¿Cuál es la diferencia entre #importar e #incluir? ¿Cuál es la diferencia entre #import & lt& gt e #import " "?

#import puede evitar el problema de la inclusión repetida de archivos de encabezado:

1) En términos generales, utilice #import cuando importe archivos de encabezado de destino c y cuando incluya archivos de encabezado de c. /c++ Utilice #include.

Preste atención al problema de las referencias repetidas al usar include:

Tanto las clases A como B se refieren a la clase c. Si la clase D hace referencia a las clases A y B, se informará un error. para referencias repetidas.

2) #import garantiza que un archivo solo se pueda importar una vez, para que no tengas problemas con la inclusión recursiva.

Entonces, la ventaja de #import sobre #include es que evita el problema de las referencias repetidas. Básicamente usamos la importación de OC.

#Import & lt& gt Contiene clases en la biblioteca de clases del marco de iOS, #import " "contiene clases personalizadas en el proyecto.

3. ¿Qué es una categoría? ¿Es mejor extender una clase mediante herencia o mediante categorías? ¿Por qué?

Respuesta: Categoría es categoría. Es bueno usar categorías porque la herencia necesita satisfacer la relación de que a es a b, mientras que las categorías solo necesitan satisfacer la relación de que a tiene b, que es menos restrictiva. Puede ampliar la funcionalidad de una clase sin definir una subclase o puede abrir la definición de clase en un archivo fuente diferente. El método de reescribir una clase con una categoría solo es válido para esa categoría y no afectará la relación entre otras clases y la clase original.

4. ¿Qué es la extensión? ¿Cuál es la función?

Respuesta: Extensión: Agregue una clase para declarar métodos privados en el archivo de implementación de su propia clase.

5. ¿Qué significan las declaraciones @ protected, @ private y @ public de las variables de instancia (miembro) de clase?

@protected: protegido. Solo se puede acceder a esta variable de instancia en esta clase y sus subclases, no en otras clases.

@privado:Privado. Solo se puede acceder a esta variable de instancia en esta clase y no en otras clases.

@ public:* * * *Sí, cualquiera puede acceder a esta variable de instancia.

6. ¿Cuáles son las características del objeto declarado por id?

No*.

Tipos de datos dinámicos

Puedes señalar un objeto de cualquier clase (establecido en nulo), independientemente de su tipo específico.

Compruebe su tipo concreto en tiempo de ejecución.

Puedes enviarle cualquier mensaje (existente).

7. ¿Qué es la delegación? ¿Qué atributos se utilizan en la declaración de propiedad del encomendante y del encomendado? ¿Por qué?

Delegar: un objeto contiene una referencia a otro objeto y el objeto referenciado implementa un protocolo predeterminado para notificar al objeto referenciado de los cambios en el objeto referenciado.

Los atributos de declaración de propiedad de la parte confiante y de la parte encargada se asignan en lugar de retenerse.

Para evitar pérdidas de memoria provocadas por referencias circulares.

El problema de las referencias circulares se entiende de la siguiente manera:

Por ejemplo, se crean dos tipos de objetos A y B en la función principal, y ahora los recuentos de referencias son ambos 1. Ahora dejemos que A y B se refieran entre sí (A tiene un atributo que es el objeto B y se conserva la descripción del atributo; b tiene un atributo del objeto A y se conserva la descripción del atributo). Ahora el recuento de referencias de ambos objetos aumenta en 1 y pasa a ser 2.

Ahora ejecute [Release]; [B Release]; en este momento, la función principal que creó el objeto ha liberado la propiedad del objeto, pero en este momento, los recuentos de referencia de A y B son. todavía 1, porque se refieren entre sí.

En este momento, descubre que A y B no se liberarán, porque si desea liberar A, primero debe liberar B y luego liberar A en el método de asignación de B. De manera similar, si desea liberar B, primero debe liberar A y luego liberar B en el método de asignación de A. De modo que estos dos objetos siempre existirán en la memoria y no se liberarán. Este es el llamado problema de referencia circular.

Para resolver este problema, el método general puede ser establecer el atributo referenciado para asignar en lugar de retener.

8. ¿Cuál es la diferencia entre copia superficial y copia profunda?

Copia superficial: solo se copia el puntero al objeto, pero no se copia el objeto al que se hace referencia.

Copia profunda: Copia el propio objeto referenciado.

Esto significa que tengo un objeto A, y después de hacer una copia, obtengo un objeto A_copy. Para una copia superficial, A y A_copy apuntan al mismo recurso de memoria, y el objeto copiado en sí es solo un puntero, por lo que si modificamos A_copy, encontramos que el objeto al que hace referencia A también ha sido modificado, lo que en realidad viola una de las ideas. de copiar. El plagio profundo es fácil de entender. Hay dos objetos separados en la memoria.

En palabras populares de un internauta, es:

Qianzhao es como tú y tu sombra. Cuando hayas terminado, tu sombra también estará terminada.

La copia profunda es como tú y tu clon. Has terminado, pero tu clon sigue vivo.

9. ¿Cuál es el principio de gestión de la memoria? ¿Qué palabras clave generaron objetos que requirieron publicación manual según las reglas predeterminadas? ¿En qué circunstancias ingresará directamente al grupo de liberación automática sin liberación manual?

Cuando se crea un objeto usando el método new, alloc o copy, el contador de referencia del objeto es 1. Si no necesita utilizar el objeto, puede enviarle un mensaje de liberación o liberación automática y destruirlo cuando haya terminado.

Si un objeto se obtiene a través de otros métodos, puede asumir que el recuento de referencias del objeto es 1 y está configurado para liberación automática, por lo que no es necesario limpiar el objeto. Si el objeto retenido realmente es necesario, es necesario liberarlo después de su uso.

Si retiene un objeto, debe liberarlo o liberarlo automáticamente y mantener igual el tiempo de uso del método de retención y del método de liberación.

Los objetos generados utilizando las palabras clave new, alloc y copy y los objetos que se han retenido deben liberarse manualmente. Los objetos configurados para ser liberados automáticamente no necesitan ser liberados manualmente y ingresarán directamente al grupo de liberación automática.

10. Cómo implementar una clase de patrón singleton con ideas sin escribir código.

Primero, debes crear una instancia global, generalmente almacenada en una variable global establecida en cero.

Proporcione métodos de fábrica para acceder a la instancia global, verifique si la variable es nula, si es nula, cree una nueva instancia y finalmente devuelva la instancia global.

Las variables globales se inicializarán en +allocwithszone: cuando se llama al método de fábrica por primera vez, el método debe reescribirse para evitar que el método alloc estándar cree una nueva instancia.

Para evitar que el método de copia obtenga una nueva instancia, es necesario implementar el método -copyWithZone.

En este método, solo necesita devolver su propio objeto y no es necesario cambiar el recuento de referencias, ya que los objetos en modo singleton no pueden destruirse, por lo que no es necesario retenido.

Debido a que no se permite la liberación de instancias globales, es necesario reescribir los métodos de retención, retención, liberación y liberación automática.

¿Cuáles son las funciones de 11 y @class?

Respuesta: En el archivo de encabezado, generalmente solo necesita saber el nombre de la clase a la que se hace referencia. No es necesario conocer sus variables y métodos de entidad internos, por lo que @class generalmente se usa en el archivo de encabezado para declarar que el nombre es el nombre de la clase. En la clase de implementación, debido a que se usarán las variables de entidad interna y los métodos de la clase a la que se hace referencia, se debe usar #import para incluir el archivo de encabezado de la clase a la que se hace referencia.

La función de @class es decirle al compilador que existe tal clase. Úsalo, no hay problema.

@class también puede resolver el problema de las dependencias circulares. Por ejemplo, A.h importa B.h y B.h importa A.h. La compilación de cada archivo de encabezado requiere que se compile primero el objeto exitoso.

Utiliza @class para evitar esta situación.

12 ¿Qué es KVC? ¿Qué es KVO? ¿Cuáles son las características?

KVC es un tipo de código clave-valor que le permite leer y establecer propiedades de una clase especificando un identificador de cadena que representa el nombre de la propiedad a la que se accederá.

KVO es una observación clave-valor. Su característica es que puedes registrarte como observador de un objeto y recibir una notificación cuando un atributo del objeto cambie.

13. ¿Qué es MVC? ¿Cuáles son las características?

–MVC es un patrón de diseño que consta de tres partes: modelo, vista y controlador.

Modelo: Clases que contienen datos de aplicaciones y manejan la lógica empresarial.

Vistas: Ventanas, controles y otros elementos que los usuarios pueden ver e interactuar.

–Controlador: una clase que vincula el modelo e intenta determinar cómo manejar la entrada del usuario.

14. Al definir propiedades, ¿cuándo se utilizan la copia, la asignación y la retención?

Utilice asignar: para tipos de datos básicos (NSInteger, CGFloat) y tipos de datos c (int, Float, double, char, etc.). )

Usar copia: NSString se puede usar cuando desea obtener una copia del objeto fuente sin cambiar el contenido del objeto fuente.

Usa retener: cuando quieras tomar posesión del objeto fuente, debes tratar otros NSObject y sus subclases.

15. ¿Cuáles son las funciones de los atributos readwrite, readonly, asignar, retener, copiar y no atómico, y cómo se utilizan en este caso?

Asignar se usa para tipos de datos simples, como NSInteger, double, bool,

Retener y copiar se usan para objetos,

Leer y escribir es una Característica de lectura y escritura; cuando necesita generar métodos getter y setter

Readonly es una característica de solo lectura; solo se generarán métodos getter; no desea que las propiedades cambien; fuera de la clase.

Asignar es una función de asignación y el método de establecimiento asigna los parámetros entrantes a las variables de instancia solo cuando se configuran las variables.

La retención se refiere a mantener la propiedad; El método de establecimiento primero retiene los parámetros pasados ​​y luego asigna el valor. El recuento de retención de los parámetros pasados ​​será +1.

Copiar representa la función de asignación, y el método de establecimiento copia los pasados. -in objeto; cuando se necesita una nueva variable.

Las operaciones no atómicas no atómicas determinan si el setter getter generado por el compilador es una operación atómica. Atómico significa seguridad multiproceso, generalmente no atómico.

16. ¿Cuáles son las características del objeto declarado por id?

Respuesta: El objeto declarado por Id tiene características de tiempo de ejecución, es decir, puede apuntar a cualquier tipo de objeto de objcetive-c

17. ? ¿Cuéntanos tus opiniones y soluciones?

Respuesta: Hay tres métodos principales de administración de memoria en Objective-C: ARC (recuento automático de memoria), recuento manual de memoria y grupo de memoria.

18. ¿Cuál es el principio de gestión de la memoria?

No importa quién presente la solicitud, serán liberados.

Siga el principio de utilizar cacao y tacto;

La gestión de la memoria debe evitar principalmente la "liberación prematura" y las "pérdidas de memoria". Cuando necesite prestar atención a configurar el atributo @property en "lanzamiento prematuro", asegúrese de utilizar la palabra clave correcta. Respecto a las "pérdidas de memoria", hay que publicar con responsabilidad y precaución.

19. ¿Qué objetos generados por palabras clave deben liberarse manualmente?

Respuesta: Los objetos generados por la palabra clave alloc o new deben liberarse manualmente.

¿Cómo evitar eficazmente las pérdidas de memoria cuando se combinan con propiedades?

Respuesta: Para establecer el atributo de propiedad correcto, es necesario colocarlo en el lugar correcto para conservarlo.

21. ¿Cómo probar el rendimiento de los dispositivos iOS?

Información personal->Instrumento->Perfilador de tiempo

22. ¿Se puede heredar una clase de Objeto-C varias veces? ¿Se pueden implementar múltiples interfaces?

Respuesta: Las clases de Object-c no se pueden heredar varias veces; pueden implementar múltiples interfaces, y la herencia múltiple en C++ se puede completar implementando múltiples interfaces.

23. ¿categoría? ¿Es mejor anular una clase mediante herencia o clasificación? ¿Por qué?

Respuesta: Categoría es categoría. Generalmente, el método de reescribir una clase con Categoría solo es válido para esa categoría y no afectará la relación entre otras clases y la clase original.

24. Describe cómo implementar el modelo de desarrollo MVC en el SDK de iOS.

MVC es un modelo de desarrollo de modelo, prueba y control. Para iOS SDK, todas las vistas son de nivel de vista y deben ser independientes de la capa de modelo y estar controladas por la capa de control de vista. Todos los datos del usuario son una capa de modelo y deben ser independientes de las vistas. Todos los ViewControllers son capas de control, responsables de controlar las vistas y acceder a los datos del modelo.

25. ¿Cuál es el método para crear un hilo en el Objeto C? Si el código se ejecuta en el hilo principal, ¿cuál es el método? Si desea retrasar la ejecución del código, ¿hay alguna forma?

Hay tres formas de crear un hilo: usar NSThread, usar el envío de GCD, usar la subclase NSOperation y luego agregarla a NSOperationQueue para ejecutar el código en el hilo principal, el método es performSelectorOnMainThread. Si desea retrasar la ejecución de su código, puede usar perform selector:on thread:with object:waituntildone.

26. ¿La resolución de pantalla del iPhone5 es 1136 * 640?

Respuesta: Resolución de pantalla: parámetro utilizado para medir la cantidad de datos de imágenes de mapa de bits. Generalmente se expresa en ppi (píxeles por pulgada). El tamaño físico de la pantalla permanece sin cambios y cuanto mayor es la resolución, más detalles (píxeles) contiene por unidad de área.