La diferencia entre Objective-C y C++
Cosas a tener en cuenta en comparación con el lenguaje C
Funciones avanzadas de Objective-c
Introducción a las herramientas de desarrollo (funciones del kit de herramientas cacao, marco, organización de archivos fuente; Introducción al uso de XCode)
Introducción:
1. Objective-c es una extensión del lenguaje C, mantenida principalmente por APPLE, y es el principal lenguaje de desarrollo bajo el sistema MAC.
Personalmente, creo que para las personas que están acostumbradas a lenguajes de uso común como C y JAVA, Objective-C es un lenguaje muy alternativo y no convencional.
2. Para desarrollar programas de interfaz de usuario de Mac, se utiliza el marco Cocoa. Los componentes de Cocoa son: marcos de base y kit de aplicación.
El marco básico maneja funciones bajo la interfaz de usuario, como estructuras de datos y mecanismos de comunicación; el marco del kit de aplicación contiene características avanzadas de Cocoa: elementos de la interfaz de usuario, impresión, color, gestión de sonido, Applescript, etc.
Cosas a tener en cuenta al comparar con el lenguaje C:
1. Introducción del archivo: Objective-C también usa archivos de encabezado, con el sufijo .h, pero usa .m (es decir, mensaje, Otros lenguajes de programación orientados a objetos también se denominan método) como sufijo del archivo fuente.
Utilice #import<> en Objective-c en lugar de #include<>. #import puede garantizar que el archivo de encabezado solo se incluya una vez.
2. Consistente con C:
Tipos de datos, expresiones, varios operadores
Bucles: for, while, do while, break, continue
Rama: si, en caso contrario, cambia
3. Función NSlog(): similar a printf(), envía información a la consola. Pero agrega algunas características, como marcas de tiempo, etc.
Cocoa añade el prefijo NS a todos los nombres de funciones, constantes y tipos.
4. La @ delante de las comillas dobles indica que la cadena entre comillas dobles debe procesarse como elemento NSString de Cocoa.
5. Tipo booleano BOOL: el valor es SÍ, NO;
6. %d significa entero de salida
%@ significa tipo NSString de salida
%s representa la matriz de cadenas de salida (char*);
7. Corchetes en objetivo-c:
1.
2. El primer elemento entre corchetes es el objeto, y el resto son las operaciones que necesita que realice el objeto.
3. Notificar a un objeto para que realice una determinada operación en Objective-C se denomina enviar un mensaje. (También llamado método de llamada)
8. Identificador id: es un tipo genérico utilizado para representar cualquier tipo de objeto.
9. Declaración de clase @interface:
@interface Circle:NSObject //Define la interfaz para la clase Circle que representa la clase principal;
{//Los siguientes son miembros de datos
ShapeColor fillColor;
Límites de ShapeRect;
}
//La siguiente es una declaración de método
-(void) setFillColor: (ShapeColor) fillColor; //El guión delante indica que se trata de una declaración de método
//Después de la guión es el tipo de retorno del método
//Luego el nombre del método
//Los dos puntos van seguidos de los parámetros, donde (ShapeColor) es el tipo de parámetro,
fillColor es el nombre del parámetro
-(void) setBounds:(ShapeRect)bounds;
-(void) draw;
//El el signo menos es una función normal
El signo más es una función estática
@end //Fin de la declaración
Objective-c ve el símbolo @ y lo considera como una extensión del lenguaje C.
La declaración completa de una clase es la siguiente:
@interface CClassA(Category): CBaseClass
//Class nombre (nombre de categoría): clase padre
10 Implementación de clase @implementation
@implementation
@implementation Circle
-(void ) setFillColor: (ShapeColor) c
{
fillColor=c;
}
-(void) dibujar
{
NSLog(@”dibujando un círculo en(%d %d %d %d) en %@”, límites.x, límites.y, límites.ancho, límites .height, colorName(fillName));
}
@end
El objeto oculto self corresponde a esto en C.
Auto->color de relleno para acceder a las variables miembro.
11. Llame a la clase escrita y a la función de clase:
//Cree un nuevo objeto y use la función de inicialización predeterminada
Banco *bankDefault =; p> p>
Si agrega un signo más delante del método al declararlo, significa que el método está definido como un método de clase. Este método pertenece al objeto de clase, no al objeto de instancia de la clase.
Clase NSArray: puede almacenar cualquier tipo de objeto.
Tiene dos limitaciones:
1. Sólo puede almacenar objetos de Objective-C, pero datos básicos. Los tipos en C, como int, float, enum, struct, etc., no se pueden almacenar.
2. Nil (el valor cero o valor NULL del objeto) no se puede almacenar porque al crear un NSArray, se agrega nil al final de la lista para representar el final de la lista.
Crear NSArray:
NSArray *array;
array=[NSArray arrayWithObjects:@"one",@"two",nil]; >
Clases NSString, NSMutableString;
NSString es inmutable, es decir, una vez creado, no se puede cambiar eliminando caracteres o agregando caracteres;
Y NSMutableString es variable .
Estas dos clases son como la diferencia entre las clases string y stringBuffer en JAVA.
NSArray, clases NSMutableArray;
Enumeración NSEnumerator;
NSEnumerator *emun;
Emun=[array objectEnumerator];
p>
Id thingie;
While(thingie=[enumerator nextObject]){}
NSDictionary: Diccionario (una colección de palabras clave y sus definiciones). También se convierte en una tabla hash, matriz asociativa, clase NSMutableDictionary;
NSNumber: se utiliza para envolver tipos de datos básicos, como int, char, float, bool. Empaquetar un tipo básico de datos en un objeto se llama boxeo; .
NSValue: Puede encapsular cualquier clase y NSNumber es su subclase.
NSNull:
Cuando ve la palabra "CF" en cacao, significa que está relacionado con el marco Core Foundation de Apple.
NSAutoreleasePool: Libera automáticamente el grupo de memoria.
4.
Gestión de memoria
Cada objeto tiene un recuento de referencia (también llamado recuento de retención) asociado.
Cuando el objeto se crea utilizando el método alloc, new o mediante un mensaje de copia (generando una copia del objeto receptor), el valor de recuento de referencia del objeto se establece en 1
Cuando se envía un mensaje de retención al objeto; , este valor aumenta;
Al enviar un mensaje de liberación, disminuya este valor.
Cuando el valor del recuento de referencia de un objeto se vuelve 0, Objective-C enviará automáticamente un mensaje de desasignación; al objeto. Destruye el objeto.
Puedes anular este método en tu propio objeto.
Utiliza el mensaje retenerCount para obtener el valor del contador de referencia.
-(id) retener;
-(void) liberar;
-(unsigned) retenerCount
Grupo de liberación automática; : grupo de liberación automática;
Crear:
NSAutoreleasePool *pool;
pool=[[NSAutoreleasePool alloc] init];
Destruir:
[liberación del grupo];
Nota: el código generado automáticamente por xcode usa [drenaje del grupo] al destruir el grupo. El método de drenaje solo borra el grupo de liberación pero no destruye el. pool. Entonces, cuando escribes tu propio código, sigues usando la versión.
Además, el drenaje solo se aplica a MAC OS 10.4 o superior, mientras que la versión se aplica a todas las versiones.
Solo cuando se envía un mensaje de liberación automática a un objeto, el objeto se agregará al NSAutoreleasepool y se liberará automáticamente.
Por ejemplo: [car autorelease];
Regla de oro de la gestión de la memoria:
Solo los objetos creados mediante los métodos alloc, new y copy requieren que los programadores sean responsables Envíe un mensaje de liberación o liberación automática al objeto.
Los objetos obtenidos mediante otros métodos están configurados para liberarse automáticamente de forma predeterminada, por lo que el programador no necesita hacer nada.
Existe un mecanismo de recolección de basura en Objective-C 2.0.
Si desea utilizar la recolección de basura para un proyecto determinado:
Información del proyecto: compilación pestaña- -Consulta "garb", aparece "objective-c Garbage Collection", establece su valor en "required[-fobjc-gc-only]"
Después de habilitar la recolección de basura, toda la administración de memoria habitual Los comandos cambian. Se convierte en una instrucción sin operación y no realiza ninguna operación.
Al desarrollar software para iPhone, no se puede utilizar la recolección de basura.
5.
Inicialización de objetos
Dos métodos para crear nuevos objetos:
[nombre de clase nuevo]
[[class name alloc] init]
Los dos métodos son equivalentes, pero la convención de Cocoa es usar el último.
alloc inicializa esta memoria a 0 mientras asigna espacio para el objeto;
Método Init: inicializa las variables de instancia para que el objeto esté disponible. [El tipo de retorno es id y el valor devuelto describe el objeto inicializado]
Al usar new para crear un nuevo objeto, el sistema debe completar dos pasos:
1. para el objeto, es decir, el objeto obtiene un bloque de memoria utilizado para almacenar sus variables de instancia;
2. Llama automáticamente al método init para que el objeto esté disponible.
6.
Las nuevas funciones de Objective-c 2.0 solo son aplicables a mac os x10.5 y superiores
@property: Indica que las propiedades de se declara el objeto. Esto elimina la necesidad de escribir descriptores de acceso a atributos.
(Tiene copiar, retener, leer, escribir, solo lectura y otros atributos)
@synthesize: significa "crear el descriptor de acceso de este atributo"
Expresión de punto
7.
Categoría
La categoría es una forma de agregar nuevos métodos a las clases existentes.
Declaración de categoría:
@interface NSString (NumberConvenience) //Nombre de clase (nombre de categoría)
-(NSNumber) lengthAsNumber //Declaración del método de extensión
@end
Al usar el nombre de la clase original, puede llamar a métodos en todas sus categorías.
Limitaciones de las categorías:
1. No se pueden agregar nuevas variables de instancia a la clase;
2. aquellos existentes en la clase Si algunos métodos tienen el mismo nombre, el método en la clase no estará disponible y será reemplazado por un nuevo método en la clase.
El papel de las categorías:
1. Distribuir la implementación de la clase en múltiples archivos o marcos
2. Crear referencias directas a métodos privados;
No hay métodos privados reales en Cocoa. La forma de lograr funciones similares de los métodos privados es:
Primero declarar el método en la categoría y luego implementarlo en la implementación existente; método de clase.
De esta forma, otros métodos de esta clase pueden utilizar este método, y otras clases externas no conocerán la existencia de este método.
3. Añadir protocolos informales a los objetos.
Crear una clase de NSObject se llama crear un protocolo informal.
Un delegado es un objeto. Un objeto de otra clase le pedirá al objeto delegado que realice algunas de sus operaciones.
Cuando el objeto delegado se activa en un momento determinado (se activa un evento), notificará automáticamente al objeto delegado que ejecute el método delegado.
Selector: @selector(): un selector es solo el nombre de un método, pero está codificado de una manera especial utilizada por el tiempo de ejecución de Objective-C para ejecutar consultas rápidamente. El contenido entre paréntesis es el nombre del método.
Entonces el selector del método setEngine: de la clase Car es: @selector(setEngine:
¿Cómo sabe el objeto delegado si su objeto delegado puede manejarlo (el objeto delegado ) se le envía el mensaje (el objeto delegado)?
Con el selector, el objeto delegado primero verifica el objeto delegado y le pregunta si puede responder al selector
< p. >8.Protocolo:
Un protocolo formal es una lista de métodos con nombre.
Adoptar un protocolo significa que se deben implementar todos los métodos del protocolo. El compilador emitirá una advertencia.
Los protocolos formales son como interfaces en JAVA
Declaración de protocolos:
@protocal NSCopying
. -(id) copywithzone:(NSZone *) zona; //Lista de métodos
@end
Adoptar protocolo:
@interface Car:NSObject
{//Lista de variables de instancia}
//Lista de métodos
@end
En Objective-C 2.0, hay nuevas características: @opcional, @required
9.
AppKit:
Crear proyecto APPKIT. :
Archivo—nuevo proyecto—mac os—aplicación—aplicación Cocoa;
IBOutlet e IBAction
Ambos son #defines proporcionados por APPKIT. p >
IBOutlet no tiene ningún efecto y no se compilará.
IBAction se define como nulo.
Estas dos son etiquetas para Interface Builder y las personas que leen el código. Los archivos /p>
.xib generalmente se denominan archivos .nib.
Los archivos .nib son archivos binarios que contienen objetos congelados
Y los archivos .xib tienen formato XML. archivo