2009-05-02 6 views
10

Siendo un desarrollador de PHP bastante experimentado, y teniendo un buen conocimiento de C (Escribí un experimento de computación distribuida con 16 de los microcontroladores NEC de mi padre), me gustaría pasar a Objective-C y Cocoa, con el objetivo de integrar las aplicaciones Mac/iPhone con algunos de mis proyectos PHP.De PHP a Objective-C

Repasando el libro "Cocoa Programming For Mac OS X" de Arron Hiilegass, me siento un poco frustrado. Puedo trabajar los ejemplos, pero él no explica exactamente por qué está usando una clase de esa manera (NSNumber en lugar de int o double, por ejemplo).

Estoy buscando un buen libro/libros para apoyarme Objective-C primero. Mi pregunta es, ¿cuál sería un buen libro? Estoy mirando "Programación en Objective-C 2.0" y parece bastante decente. ¿A dónde iría desde allí? Estoy pensando que debería reiniciar en mi libro de Cocoa.

Además, ¿hay algún recurso en Internet que pueda ayudar en la transición de PHP a Objective-C? Sé que PHP es un lenguaje de scripting sin tipeo, por lo que tiene sus diferencias. Hay algunas cosas que simplemente no tienen sentido con Obj-C y Cocoa, ¿por qué no puedo poner enteros en un NSMutableArray?

De todos modos. ¡Gracias por la ayuda! (Tengo solo 14 años, así que no me moleste si cometí errores en mi Q.)

+2

No es realmente una respuesta a la pregunta del libro per se, pero es bastante normal tener preguntas (como "¿Por qué usar X en lugar de Y?") Cuando estás aprendiendo algo nuevo. No dude en preguntar sobre el desbordamiento de la pila. De esta manera, otras personas que tienen las mismas preguntas pueden encontrarlas ya formuladas y respondidas. – Chuck

+0

Gracias por la ayuda de todos, me gustaría poder elegir más de 1 respuesta. Esta es una gran comunidad, mientras aprendemos Obj-C, definitivamente voy a probar mi parte y devolver a las secciones de PHP. –

Respuesta

8

Acabo de pasar por "Programación en Objective-C 2.0" y es bastante bueno. Lo recomendaría, especialmente si nunca has usado C (o si lo has olvidado, como yo).

Sin embargo, Apple realmente tiene una documentación excelente. Si no te importa leer en línea, comenzaría con su página Getting Started with Cocoa.

+0

El "lenguaje de programación Objective-C" de Apple, enlazado desde allí, describe por completo Objective-C e incluye ejemplos de lo que se está discutiendo. Un poco seco, pero muy informativo. – Chuck

+0

He pasado por más del libro en B & N, lo estoy ordenando ahora, parece un gran libro que explica las cosas muy claramente. Soy más un tipo "Dime por qué". –

1

También, para responder a sus preguntas:

Objective-C es un lenguaje orientado a objetos construida como una extensión en la parte superior de C.

Como tal, proporciona ambos tipos primitivos (como int y doble) y objetos.

NSNumber es una clase Objective-C que representa un número MÁS un número de operaciones en ese número (métodos). La ventaja de usar un NSNumber sobre un tipo primitivo numérico es que puede usarse de forma orientada a objetos (puede enviar mensajes a él, puede ampliar su funcionalidad con "protocolos", puede heredar de él, puede pasar en un método que espera un objeto, etc.).

En cuanto a NSMutableArray, esta es una clase que proporciona una funcionalidad tipo array. Está diseñado para trabajar con tipos de objetos Objective-C (es un contenedor de objetos tipo NSObject y objetos que heredan de ellos) y esta es la razón por la cual no puede contener un número entero. Sin embargo, puede contener un NSInteger que es una clase Object-C que representa un entero.

+0

¡Gracias! Estaba trabajando en una herramienta básica simple para calcular la desviación absoluta media. No sabía que había un NSInteger, creo que la descarga de mi documentación se interrumpió, así que solo puedo tener la mitad. ¡Gracias! –

+0

NSInteger no es una clase. Es un alias para un número entero de tamaño apropiado para su entorno (32 bits frente a 64 bits). Lo siguiente se puede encontrar en NSObjCRuntime.h en la línea 106: #if __LP64__ || NS_BUILD_32_LIKE_64 typedef long NSInteger; typedef unsigned long NSUInteger; #else typedef int NSInteger; typedef unsigned int NSUInteger; #endif –

7

soy capaz de trabajar los ejemplos, pero no explica exactamente por qué él está usando una clase de esa manera (NSNumber en lugar de int o double por ejemplo) ...

Hay algunas cosas que simplemente no tienen sentido con Obj-C y Cocoa, ¿por qué no puedo poner enteros en un NSMutableArray?

NSNumber es un tipo mucho más útil que un tipo simple como int o double, ya que se utiliza a menudo en combinación con otros objetos se encontrará con que se programa en el cacao.

Por ejemplo, con el fin de empaquetar un número como un valor en una matriz de tamaño variable (como un NSMutableArray) o una matriz asociativa (una instancia de NSDictionary), que necesita para convertir el número primitivo (int, double, etc.) en un serializable, u objeto archivable - un NSNumber.

primitivas no pueden ser serializados, a diferencia de un NSNumber, porque no son primitivas en el conjunto básico de tipos "base fundamental" (NSNumber, NSArray, NSString, etc.) que Apple ha trabajado duro para poner a su disposición .

Además, al usar NSNumber también obtiene una gran cantidad de métodos extra de conveniencia de forma gratuita: puede convertir rápidamente el número en una cadena, por ejemplo, simplemente escribiendo [myNumber stringValue].

O, si está tratando su NSNumber como el precio de algo ("$ 1,23"), puede aplicar un NSNumberFormatter para asegurarse de que las operaciones en el número den resultados que tengan el formato que usted esperaría (ej. agregas dos valores de precio, esperarías obtener un valor de moneda a cambio).

Eso no quiere decir que no pueda o no deba usar las variables int o double. Pero en muchos casos, encontrará que una NSNumber es una mejor opción, ya que puede escribir menos código y obtener una gran cantidad de funcionalidades para "gratis".

+0

¡Gracias por la explicación! Estoy bastante seguro de que no, pero ¿existe una manera rápida y fácil de crear un nuevo objeto NSNumber? Además, sé que NSNumber no es mutable, ¿hay alguna versión que sea? ¿Tal vez NSInteger? (Estoy volviendo a descargar la Biblioteca de referencia principal en este momento) –

+0

NSNumber * myNumber = [NSNumber numberWithInt: 5]; –

+0

Esto no es realmente exacto. La serialización no tiene nada que ver con si un valor puede ir en un NSArray. La razón por la que un int no puede ir en un NSArray es porque un int no es un objeto, y NSArray solo funciona con objetos (indicado por tener initWithObjects: y objectAtIndex: tomar argumentos de tipo "id" - id es diferente de int) . Esta es la razón por la que NSNumber existe: proporciona un objeto para ajustar un int o un float para que puedan almacenarse en lugares que esperan objetos. Tampoco diría que NSNumber es más útil que int - trate de hacer matemática con NSNumber en algún momento. – Chuck

0

Estaba en un barco similar (PHP moviéndose a Objective-C) y encontré que el mejor proceso era saltar a un proyecto. Repasé el libro de Hillegass también y fue un buen comienzo, pero la única forma de conocer un idioma es simplemente abrirse paso con un objetivo claro.

Es doloroso pero funciona. Café, API y kleenex.

EDIT: Acabo de leer la última parte de su correo y vi que eras 14. Tal vez conmutar el café con Coca-Cola :)

+0

oh dios, me encanta el coque. –

+0

No te olvides del ibuprofeno. Especialmente cuando llegas al dibujo de Quartz. – willc2

5

En mi experiencia, he encontrado la documentación de Internet a ser bastante útil en el aprendizaje Obj-C y CocoaTouch. Mi progresión fue algo como esto:

1) Mira los videos de Apple Dev en iTunes (son gratuitos).

2) Lea Getting Started, iPhone Application Programming Guide.

3) Lea OOP In Obj-C.

4) Leer más: Cocoa Fundamentals, Objective-C Primer, Cocoa Practices.

5) Haga algunos tutoriales simples.

IMO: Toda la información que necesita está en el sitio de Apple Dev: iPhone. Ahorre su dinero y no compre libros. Si no entiende "POR QUÉ" se hace algo en una de las guías o tutoriales, haga una referencia inmediata con otras fuentes de Google.

Debe tener en cuenta que la curva de aprendizaje aquí es bastante grande. Fue para mí y estoy estudiando cosas como esta todos los días en la universidad. Por lo tanto, quédese con él y lea de una manera inteligente (lea lo que sabe).Lo que veo en mí, es que si entiendo cómo funciona el iPhone y conozco el flujo de datos, entonces programarlo es principalmente un problema de sintaxis.

PHP es muy diferente de Objective-C. Además, la forma en que se resuelven los problemas de programación en PHP en el contexto de Internet es muy diferente de la forma en que se resuelven los problemas de programación en Obj-C, en el contexto del iPhone. Debido a esto, desea acercarse al iPhone desde una nueva perspectiva, y como estudiante/alumno. Tómese su tiempo y concéntrese en la Programación Orientada a Objetos y las mejores prácticas. Esto te bendecirá por los años venideros.

-Buffalo

0

Mi tutorial favorito de Objective-C si vienes de cualquier parte es el curso de iTunesU de Stanford en la programación de iOS. El profesor realmente pone las cosas en perspectiva de los otros libros y tutoriales en línea.

Cuestiones relacionadas