Red de conocimiento informático - Material del sitio web - Cómo desarrollar software IOS usando programación mixta de C y Objective-C

Cómo desarrollar software IOS usando programación mixta de C y Objective-C

Usar C con Objective-C El compilador Objective-C de Apple permite a los usuarios mezclar libremente C y Objective-C en el mismo archivo fuente. El lenguaje mixto se llama Objective-C. Con él, puede utilizar bibliotecas C existentes en aplicaciones Objective-C. Puntos clave de mezclar Objective-C y C En Objective-C, los métodos se pueden llamar desde código C o desde Objective-C. En ambos idiomas los objetos son punteros y pueden usarse en cualquier lugar. Por ejemplo, una clase C puede usar un puntero a un objeto Objective-C como miembro de datos, y una clase Objective-C también puede tener un puntero a un objeto C como variable de instancia. El siguiente ejemplo ilustra esto. Nota: Xcode requiere que el archivo fuente tenga una extensión ".mm" para habilitar la extensión Objective-C del compilador.

Copiar código /* Hola.mm * Compilar con: g -x Objective-c -framework Foundation Hello.mm -o hola */#import lt; Foundation/Foundation.hgt; class Hola {privado: id Greeting_text; NSStringpublic: Hola() { saludo_texto = @"¡Hola mundo!"; } Hola(const char* inicial_saludo_texto) { saludo_texto = [[NSString alloc] initWithUTF8String: inicial_saludo_texto] } void say_hello() { printf("s/n" , [greeting_text UTF8String]); }}; @interface Saludo: NSObject {@private Hola *hola;}- (id)init;- (void)dealloc;- (void)sayGreeting;- (void)sayGreeting: (Hola* )saludo; @end@implementación Saludo- (id)init { if (self = [super init]) { hola = new Hola() } return self }- (void)dealloc { eliminar hola; }- (void)saludo { hola-gt; say_hello(); }- (void)saludo: (Hola*)saludo { say_hello() }@endint main() { NSAutoreleasePool *pool = [[NSAutoreleasePool; alloc] init]; Saludo *saludo = [[Saludo alloc] init]; [saludo saludo]; // gt; Hola mundo! Hola *hola = new Hola("¡Bonjour, mundo!"); ]; // gt; ¡Buen día! eliminar hola; [saludo lanzamiento]; retorno 0;} Así como puedes declarar estructuras C en interfaces OC, también puedes declarar clases C en interfaces OC.

Al igual que las estructuras C, las clases C definidas en las interfaces OC tienen un alcance global, no clases anidadas de clases OC (esto es consistente con el C estándar (aunque no C) que promueve estructuras anidadas definidas en el alcance del archivo). Para permitirle escribir código condicionalmente basado en variantes del lenguaje, el compilador OC define las constantes del preprocesador __cplusplus y __OBJC__, designadas como C y OC respectivamente. Como se mencionó anteriormente, OC no permite que las clases C hereden de objetos OC, ni las clases OC heredan de objetos C. Copiar código class Base { /* ... */ }; @interface ObjCClass: Base ... @end // ¡ERROR! clase Derivada: public ObjCClass ... // ¡ERROR! El polimorfismo como caso especial. Por tanto, los modelos de objetos de los dos lenguajes no son directamente compatibles. Más fundamentalmente, el diseño de los objetos Objective-C y C en la memoria es mutuamente incompatible, es decir, generalmente es imposible crear una instancia de objeto que sea válida desde la perspectiva de ambos lenguajes. Por tanto, no se pueden mezclar los dos tipos de jerarquías. Puede declarar clases C dentro de clases OC y el compilador tratará estas clases como si estuvieran declaradas en el espacio de nombres global. Como a continuación: Copiar código @interface Foo { class Bar { ... } // OK } @endBar *barPtr // OK OC permite estructuras C como variables de instancia, independientemente de si se declaran dentro de una declaración OC. Copiar código @interface Foo { struct CStruct { ... }; struct CStruct bigIvar; // OK } ... @end Después de Mac OS X 10.4, si configura el indicador del compilador fobjc-call-cxx-cdtors, puede utilizar una instancia de clase C que contiene funciones virtuales y constructores y destructores significativos sin argumentos definidos por el usuario como variables de instancia (gcc-4.2 establece el indicador del compilador fobjc-call-cpp-cdtors de forma predeterminada). Una vez asignadas las variables miembro de OC, la función alloc llamará al constructor en el orden de declaración. El constructor utiliza un constructor público, sin parámetros y apropiado. Antes de la variable miembro de OC reparto, el método reparto llama al destructor en orden inverso a la declaración. OC no tiene concepto de espacio de nombres. Las clases OC no se pueden declarar dentro de un espacio de nombres C, ni tampoco se pueden declarar espacios de nombres dentro de clases OC. Las clases, protocolos y categorías de OC no se pueden declarar en plantillas de C, y las plantillas de C no se pueden declarar dentro del alcance de las interfaces, protocolos y categorías de OC. Sin embargo, las clases de OC se pueden usar como parámetros de la plantilla C, y los parámetros de la plantilla C también se pueden usar como receptores o parámetros de expresiones de mensajes OC (no a través de selectores). C Ambigüedades y conflictos de vocabulario El archivo de encabezado de OC define algunos identificadores que todos los programas de OC deben contener. Estos identificadores identifican id, Class, SEL, IMP y BOOL. En el método OC, el compilador predeclara los identificadores self y super, al igual que la palabra clave this en C. A diferencia de C, self y super son sensibles al contexto y también pueden usarse para identificadores ordinarios además de los métodos OC. La lista de parámetros de métodos dentro del protocolo tiene 5 palabras clave sensibles al contexto (oneway, in, out, inout, bycopy). Estas no son palabras clave en otro contenido. Desde la perspectiva de un programador de OC, C ha agregado muchas palabras clave nuevas.

Aún puedes usar palabras clave C como parte de los selectores de OC, por lo que el impacto no es grave, pero no puedes usarlas para nombrar clases de OC y variables de instancia. Por ejemplo, aunque clase es una palabra clave en C, aún puede usar la clase del método NSObject: Copiar código [foo class] // OK Sin embargo, debido a que es una palabra clave, no puede usar clase como nombre de variable: Copiar código NSObject; *class; // Hay espacios de nombres separados para nombres de clases y nombres de categorías en Error OC. @interface foo y @interface(foo) pueden existir en el mismo código fuente al mismo tiempo. En OC, también puedes nombrar tus categorías usando nombres de clases o nombres de estructuras en C. Los identificadores de protocolo y plantilla utilizan la misma sintaxis pero tienen diferentes propósitos: Copiar código idlt; ​​someProtocolNamegt; TemplateTypelt; SomeTypeNamegt; Finalmente, C tiene una ambigüedad de sintaxis cuando una etiqueta va seguida de una expresión que representa un nombre global, como esta: Copie la etiqueta del código: ::global_name = 3; se requiere un espacio después de los primeros dos puntos. OC tiene una situación similar y también requiere un espacio: Copiar selector de receptor de código: :: global_c _name Limitación OC no agrega la función C a la clase OC, ni agrega la función OC a la clase C. Por ejemplo, no puede llamar a objetos C usando la sintaxis OC, ni puede agregar constructores y destructores a objetos OC, ni puede usar this y self indistintamente. La arquitectura de clases es independiente. La clase C no puede heredar la clase OC y la clase OC no puede heredar la clase C. Además, no se admite el manejo de excepciones en varios idiomas. En otras palabras, una excepción lanzada por OC no puede ser detectada por el código C y, a la inversa, una excepción lanzada por el código C no puede ser detectada por el código OC.

上篇: Cómo implementar el proyecto Django en el servidor Alibaba Cloud1. ¿Qué tipo de servidor en la nube se requiere para las aplicaciones de aplicaciones? Para ayudar a todos a comprender cómo usar los servidores en la nube de Alibaba Cloud y las aplicaciones relacionadas, el equipo de Alibaba Cloud Mobile Cloud desarrolló una aplicación de aplicación simple: Mobile Cloud Photo Album. El ECS utilizado se utiliza principalmente para implementar servicios API para álbumes de fotos en la nube. (llamadas de información de imágenes, llamadas de listas de imágenes) y procesamiento de miniaturas de imágenes. Dado que el lado del servidor de esta aplicación se desarrolla utilizando el lenguaje JAVA, es necesario instalar el Tomcat anterior para implementar la aplicación. Implementación específica 1) Inicio de sesión remoto: después de comprar ECS por primera vez, la cuenta raíz y la contraseña del servidor ECS se enviarán al correo electrónico del comprador. En este momento, el comprador puede iniciar sesión de forma remota en el servidor ECS. El método de inicio de sesión remoto específico puede denominarse de la siguiente manera: Windows: China/ /help.aliyunchina/manual?spm=5176.383518.5.16.4lLZzn&helpId=59Linux: China//help.aliyunChina/manual?spm=5176.383518.5.16.4lLZzn&helpId=59 2) Instale el entorno web de acuerdo con las características de su propia aplicación. Para el servidor web Tomcat o Jetty, Alibaba Cloud proporciona scripts de instalación e implementación integrales para brindar mayor comodidad a los desarrolladores. Consulte el siguiente enlace: China // ayuda. .aliyunChina/manual?spm=0.0.0.0.RGeYy4&helpId= 129 3) Empaquete la aplicación localmente y use el comando mvnpackage para convertirla en un paquete de guerra. Si no es un proyecto maven, puede utilizar herramientas como ant para crear un paquete de guerra. 4) Cargue el paquete war. En Linux, puede usar sftp para cargar el paquete war. Después de la descompresión, cargue el paquete war en el directorio especificado. Para un uso específico, consulte: China //help.aliyun China/manual. spm=0.0.0.0.PnfpSL&helpId=1848 5) Inicie el servicio web e inicie Tomcat o el servicio jetty 6) Configure China inversa y vincule el nombre de dominio Para obtener información de configuración específica, consulte: China //help.aliyun China/. manual?spm=0.0.0.0.0.Ti7iuA&helpId=532, China / /help.aliyun China/manual?spm=0.0.0.0.0.MKbFj1&helpId=65 2. ¿Cómo guarda la aplicación las imágenes en el servidor de almacenamiento en la nube? El núcleo de la arquitectura de la aplicación de imágenes radica en el almacenamiento y el acceso a una gran cantidad de archivos pequeños. Cuando la cantidad de archivos es grande, almacenar los archivos directamente en el disco duro afectará en gran medida la eficiencia del acceso de la aplicación. Alibaba Cloud Storage Service OSS tiene grandes ventajas en el almacenamiento y gestión de archivos pequeños masivos. Las imágenes no se descargan del servidor, lo que reduce la presión sobre el servidor. El mecanismo de copia de seguridad de Alibaba Cloud OSS también garantiza la seguridad del almacenamiento de archivos. Su capacidad de almacenamiento se puede ampliar infinitamente, con más de 50.000 solicitudes por segundo. La red BGP China multilínea garantiza un acceso fluido en todo el país. Pasos para usar Alibaba Cloud OSS: 1) Inicie sesión en Alibaba Cloud China (aliyun China) oficial para abrir OSS 2) Obtenga la CLAVE y la clave 3) Descargue el SDK (la dirección de descarga de la versión JAVA es: China//bbs.aliyun China/job.php?action =download&aid=38817 Manual de ayuda: China//) aliyun_portal_storage.oss.aliyuncsChina/oss_api/oss_javahtml/index.html). 下篇: Cuatro formas de implementar subprocesos múltiples