Eduard TomàsIntroducción al desarrollo en iOS para desarrolladores.NETMaster RIATec10 apr
www.pasiona.cominfo@pasiona.com(+34) 669 333 333@pasiona            Barcelona                 Bilbao                      ...
Qué esMicrosoft                                 Innovación                                      Pasiónsocio 100% alineado ...
ServiciosConsultoría   Proyectos       Auditoría              Servicios                    Social      Formación          ...
Eduard TomàsKey Consultant en pasiona ConsultingDivulgador Tecnológico en Fundación Techdencias   @eiximenisetomas@pasiona...
AgendaUn nuevo entorno: XCodeUn nuevo lenguaje: ObjectiveCModelo de desarrollo de aplicaciones iOS
Tema 1Un nuevo entorno: XCode
XCode Xcode juega en iOS/MacOS el rol de Visual  Studio IDE completo para desarrollar aplicaciones  iOS y MacOS   Lengu...
Tema 2Un nuevo lenguaje: ObjectiveC
Objective-C Conocido popularmente como “C with classes” NO es C++, NO tiene nada que ver con C++ Soporte para   OOP (C...
Objective-C: Tipos simples A diferencia de .NET en objectiveC existen  tipos simples que NO son objetos (char, int,  floa...
Objective-C: Tipos simples No existe un tipo booleano. Se usa:    BOOL (typedef signed char)    YES / NO (#defines a 1 ...
Objective-C: Tipos simples Las structs de ObjectiveC no tienen NADA que  ver con las de .NET   No pueden tener métodos  ...
Objective-C: Tipos simples Los arrays de ObjectiveC son parecidos a los  de .NET salvo que:   No existen jagged arrays  ...
Objective-C: Tipos simples En ObjectiveC existen los punteros   Imprescinbibles para tratar con objetos (NO     hay refe...
Objective-C: Clases Mismo concepto que la clase de C#   Se define en dos archivos (.h y .m)   .h contiene la interfaz (...
Objective-C: Clases Ejemplo (.h)#import <Foundation/Foundation.h>@interface Person : NSObject- (void)sayHello;@end Ejemp...
Objective-C: Instanciación NO existe operador new Instanciar un objeto es un proceso en 2 pasos   Llamar al método allo...
Objective-C: Instanciación Ejemplo:Person *somePerson = [Person alloc];[somePerson init]; Aunque se suele combinar alloc...
Objective-C: Parámetros Forman parte del nombre del método Tienen un nombre “externo” y otro interno- (void)sayHelloToNa...
Objective-C: Parámetros   -(NSNumber*) addWithTwoNumbers:(NSNumber *)first    secondNumber:(NSNumber *)second;   NSNumbe...
Objective-C: Parámetros   -(NSNumber*) addWithTwoNumbers:(NSNumber *)first    secondNumber:(NSNumber *)second;   El nomb...
Objective-C: Propiedades Las clases de ObjectiveC pueden tener   propiedades@property (copy) NSString *name; Se pueden a...
Objective-C: Propiedades Podemos implementarlas nosotros:@property unsigned int age;- (unsigned int)age { return _age; }-...
Objective-C: Propiedades Debemos añadir la variable de instancia   (_age). Podemos hacerlo en:    @interface y que sea p...
Objective-C: Propiedades Recuerda que los getters y setters son  métodos, por lo tanto se invocan mediante  paso de mensa...
Objective-C: Memoria La gestión de memoria es uno de los grandes  quebraderos en ObjectiveC. Hay 3 modelos:   Manual   ...
Objective-C: Memoria El runtime de ObjectiveC lleva una cuenta de  cuantas referencias apuntan a un objeto. Si  este cont...
Objective-C: Memoria La gestión manual se basa en cuatro métodos   alloc: reserva memoria y suma uno al     contador de ...
Objective-C: Memoria La idea de la gestión manual es muy simple:   El número de veces que se “reclama” un     objeto (al...
Objective-C: Memoria Usar un objeto DESPUÉS de que haya sido  liberado es un error y suele ser catastrófico No liberar u...
Objective-C: Memoria La gestión manual es muy simple en objetos  de la pila pero se complica cuando se pasan  objetos ent...
Objective-C: Memoria La diferencia entre release y autorelease es   que el primero decrementa al acto el contador   y el ...
Objective-C: Memoria Para las propiedades podemos indicar como   queramos que se comporten:    assign: Crea una weak ref...
Objective-C: ARC Por suerte nos podemos olvidar de la gestión  manual de memoria gracias a ARC que sí que  está soportado...
Objective-C: ARC La primera norma al usar ARC es muy simple:   NO llamar NUNCA a retain, release o     autorelease. Nunc...
Objective-C: ARC Para las propiedades NO usaremos assign o  retain, en su lugar usaremos:   weak: Para especificar una p...
Objective-C: ARC ARC evita que un puntero que apunta a un  objeto eliminado siga apuntando a un espacio  de memoria “invá...
Objective-C: Métodos estáticos ObjectiveC soporta métodos estáticos. Son los   que empizan por + en su declaración:@inter...
Objective-C: Métodos init Si quieres crear un método init propio debes    declararlo que devuelve id:-   (id)init {     s...
Objective-C: Nombres En Objective-C se busca que los nombres de   los métodos sean lo más informativos posibles No uses:...
Objective-C: Initialize El método estático initialize juega el mismo rol   que el constructor estático en C#static Ship *...
Objective-C: Métodos privados Objective-C NO tiene métodos privados. Se simulan NO colocando el método en la  interfaz (...
Objective-C: Categorías   Una categoría ofrece un conjunto de métodos adicionales sobre    una clase. Lo más parecido que...
Objective-C: Categorías   Las categorías se declaran como una clase cuyo nombre es    ClaseQueSeExtiende (NombreCategoría...
Objective-C: Métodos protected Objective-C NO tiene el concepto de métodos  protegidos Se pueden simular colocándolos to...
Objective-C: Protocolos Un protocolo es un conjunto de métodos que  una clase debe implementar. Son como los interfaces ...
Objective-C: Protocolos La definición es con @protocol:@protocol CoordinateSupport <NSObject>@property double x;- (NSArra...
Objective-C: Protocolos Para que una clase adopte un protocolo se   usa la notación angular:@interface Person : NSObject ...
Objective-C: Protocolos Al igual que las interfaces en C# un protocolo    define un tipo por si mismo. Aunque en Objecti...
Tema 3Modelo de desarrollo deaplicaciones iOS
iOS – Modelo MVC Una aplicación iOS se construye mediante el  patrón MVC   Modelo: Datos de la aplicación   View: Vista...
iOS – Vistas Ficheros nib (.xib) Contienen los controles de la vista, sus  propiedades y los enlaces de eventos Equival...
iOS – Controladores Contienen outlets y acciones   Outlet: Puntero que apunta a un control de     la vista controlada  ...
iOS – Controles son vistas Conceptualmente los controles iOS son vistas Algunos tienen su propio controlador   Caso de ...
iOS – App Delegate Clase encargada de inicializar la aplicación.   Crea la vista inicial y su controlador   Coloca la v...
iOS – Aplicación single-view Contiene:   Una vista (fichero .xib)   Un controlador   Un application delegate
iOS – Rotación Puede ser:  1. Automática  2. Reposición de controles manual  3. Mediante dos vistas (landscape y portrait...
iOS – Rotación automática iOS rota las vistas automáticamente Para que los controles se reposicionen  correctamente debe...
iOS – Reposición manual Para layouts complejos puede ser necesario   reposicionar los controles manualmente Usar método ...
iOS – Rotación: dos vistas Para vistas complejas o funcionalidades   distintas según orientación deberemos usar   dos vis...
iOS – Aplicaciones multivista Constan de:   N vistas (.xib) secundarias   N controladores   Una vista principal con el...
iOS – Control TableView                    Necesita un delegado                     (UITableViewDelegate) y              ...
iOS – Control TableView                       Lista de datos                       Agrupaciones de                      ...
iOS – Control TableView                    Necesita un delegado                     (UITableViewDelegate) y              ...
iOS – Storyboards Permiten definir el flujo de una aplicación de  forma gráfica “Agrupan” varios ficheros nib en uno sol...
Eduard Tomàs  @eiximenisetomas@pasiona.comeiximenis@techdencias.net                            Gracias!
Próxima SlideShare
Cargando en…5
×

Introducción a ObjectiveC e IOS

1.426 visualizaciones

Publicado el

Una introducción al desarrollo de aplicaciones en iOS usando Objective-C.
La mayor parte es explicación de conceptos de Objective-C para desarrolladores que vengan de .NET

Publicado en: Tecnología
0 comentarios
0 recomendaciones
Estadísticas
Notas
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

Sin descargas
Visualizaciones
Visualizaciones totales
1.426
En SlideShare
0
De insertados
0
Número de insertados
2
Acciones
Compartido
0
Descargas
39
Comentarios
0
Recomendaciones
0
Insertados 0
No insertados

No hay notas en la diapositiva.

Introducción a ObjectiveC e IOS

  1. 1. Eduard TomàsIntroducción al desarrollo en iOS para desarrolladores.NETMaster RIATec10 apr
  2. 2. www.pasiona.cominfo@pasiona.com(+34) 669 333 333@pasiona Barcelona Bilbao Madrid Londres Pujades 350, 10ª planta Gran Vía 19-21, 2ª planta Pinar 5, 1 Northumberland Avenue 08019 · Barcelona 48008 · Bilbao 28006 · Madrid London · WC2N 5BW
  3. 3. Qué esMicrosoft Innovación Pasiónsocio 100% alineado ligada a la mejora continua y basada somos grandes entusiastas de todopartner 100% especializado en las nuevas oportunidades tecnológicas aquello que creamos y vemos crecerDesarrollo Tecnología Experienciacapacidad para realizar proyectos de soluciones a cada una de las necesidades o la garantía de la habilidad derivadaámbito tecnológico con un fin de mejora empresariales que se platean en cada ámbito de años de vivencias y observaciónEspecialización Conocimiento Valores humanosofrecemos soluciones a medida con adquirido a través de la realización de guía de lo que hacemos y pretendemoslas mejores herramientas tecnológicas proyectos, formación e innovación tecnológica que nos enseña y nos conduce día a día
  4. 4. ServiciosConsultoría Proyectos Auditoría Servicios Social Formación profesionales Media Innovación Azure
  5. 5. Eduard TomàsKey Consultant en pasiona ConsultingDivulgador Tecnológico en Fundación Techdencias @eiximenisetomas@pasiona.com eiximenis@techdencias.net
  6. 6. AgendaUn nuevo entorno: XCodeUn nuevo lenguaje: ObjectiveCModelo de desarrollo de aplicaciones iOS
  7. 7. Tema 1Un nuevo entorno: XCode
  8. 8. XCode Xcode juega en iOS/MacOS el rol de Visual Studio IDE completo para desarrollar aplicaciones iOS y MacOS  Lenguajes: C/C++, ObjectiveC
  9. 9. Tema 2Un nuevo lenguaje: ObjectiveC
  10. 10. Objective-C Conocido popularmente como “C with classes” NO es C++, NO tiene nada que ver con C++ Soporte para  OOP (Clases, interfaces, herencia…),  Programación dinámica  Gestión manual, semi-automática o automática (GC) de memoria
  11. 11. Objective-C: Tipos simples A diferencia de .NET en objectiveC existen tipos simples que NO son objetos (char, int, float, double, long, struct,…) Para tratar con objetos NO se usan referencias, se usan punteros
  12. 12. Objective-C: Tipos simples No existe un tipo booleano. Se usa:  BOOL (typedef signed char)  YES / NO (#defines a 1 y 0) El if() de ObjectiveC se evalúa a true si el valor es !=0 y a false si es 0.
  13. 13. Objective-C: Tipos simples Las structs de ObjectiveC no tienen NADA que ver con las de .NET  No pueden tener métodos  No pueden tener datos privados Son las structs de C!
  14. 14. Objective-C: Tipos simples Los arrays de ObjectiveC son parecidos a los de .NET salvo que:  No existen jagged arrays  El nombre del array es un puntero a su primer elemento
  15. 15. Objective-C: Tipos simples En ObjectiveC existen los punteros  Imprescinbibles para tratar con objetos (NO hay referencias).  La llamada a alloc devuelve un puntero Para declarar un puntero se usa Tipo* El valor nil (o NULL) significa que el puntero apunta a nada.
  16. 16. Objective-C: Clases Mismo concepto que la clase de C#  Se define en dos archivos (.h y .m)  .h contiene la interfaz (@interface) de la clase  NADA que ver con interface de C#
  17. 17. Objective-C: Clases Ejemplo (.h)#import <Foundation/Foundation.h>@interface Person : NSObject- (void)sayHello;@end Ejemplo (.m)#import "Person.h"@implementation Person- (void)sayHello { NSLog(@"Hello, my name is HAL.");}@end
  18. 18. Objective-C: Instanciación NO existe operador new Instanciar un objeto es un proceso en 2 pasos  Llamar al método alloc  Llamar al método init  En ObjectiveC no hay constructores. Se usa init() para código de inicialización custom
  19. 19. Objective-C: Instanciación Ejemplo:Person *somePerson = [Person alloc];[somePerson init]; Aunque se suele combinar alloc e init:Person *somePerson = [[Person alloc] init]; Los corchetes ([ ]) son el operador de envío de mensajes  Equivale a llamar a un método en C#
  20. 20. Objective-C: Parámetros Forman parte del nombre del método Tienen un nombre “externo” y otro interno- (void)sayHelloToName:(NSString *)aName;- (void)sayHelloToName:(NSString *)aName { NSLog(@"Hello %@, my name is HAL.", aName);}[somePerson sayHelloToName:@"Bill"];
  21. 21. Objective-C: Parámetros -(NSNumber*) addWithTwoNumbers:(NSNumber *)first secondNumber:(NSNumber *)second; NSNumber* -> Tipo de vuelta addWithTwoNumbers: -> Nombre método + externo param 1 (NSNumber*)first -> Tipo param 1 y nombre interno secondNumber: -> nombre externo param 2 (NSNumber*)second -> Tipo param 2 y nombre interno
  22. 22. Objective-C: Parámetros -(NSNumber*) addWithTwoNumbers:(NSNumber *)first secondNumber:(NSNumber *)second; El nombre de este método es: addWithTwoNumbers:secondNumber: Sobre este nombre se podría crear un selector para invocarlo dinámicamente
  23. 23. Objective-C: Propiedades Las clases de ObjectiveC pueden tener propiedades@property (copy) NSString *name; Se pueden auto-implementar (en el .m) con: @synthesize name = _name; @synthesize genera los métodos set y get (llamados setName y name en este caso)
  24. 24. Objective-C: Propiedades Podemos implementarlas nosotros:@property unsigned int age;- (unsigned int)age { return _age; }- (void)setAge:(unsigned int)age { _age = age; }
  25. 25. Objective-C: Propiedades Debemos añadir la variable de instancia (_age). Podemos hacerlo en:  @interface y que sea pública o protegida  @implementation y que sea privada@implementation Person { unsigned int _age;}
  26. 26. Objective-C: Propiedades Recuerda que los getters y setters son métodos, por lo tanto se invocan mediante paso de mensajes (corchetes) Aunque SOLO para las propiedades existe la posibilidad de usarlas mediante la notación de punto (.)
  27. 27. Objective-C: Memoria La gestión de memoria es uno de los grandes quebraderos en ObjectiveC. Hay 3 modelos:  Manual  Semi-automática (ARC, Automatic Reference Counting)  Automática (GC, Garbage Collector) La última NO puede usarse en iOS
  28. 28. Objective-C: Memoria El runtime de ObjectiveC lleva una cuenta de cuantas referencias apuntan a un objeto. Si este contador llega a 0 el objeto puede ser destruido. La diferencia entre ARC y la gestión manual es quien actualiza este contador.
  29. 29. Objective-C: Memoria La gestión manual se basa en cuatro métodos  alloc: reserva memoria y suma uno al contador de referencias del objeto  retain: Suma uno al contador de referencias del objeto  release y autorelase: Decrementa en uno el contador de referencias
  30. 30. Objective-C: Memoria La idea de la gestión manual es muy simple:  El número de veces que se “reclama” un objeto (alloc, retain) debe ser igual al número de veces que se libera (release, autorelase)  Por cada llamada a alloc/retain debe haber una llamada a release o autorelease.
  31. 31. Objective-C: Memoria Usar un objeto DESPUÉS de que haya sido liberado es un error y suele ser catastrófico No liberar un objeto nunca genera un memory- leak
  32. 32. Objective-C: Memoria La gestión manual es muy simple en objetos de la pila pero se complica cuando se pasan objetos entre ellos (p. ej. en propiedades).  Cuidado al usar weak-references! (Al guardar un puntero a un objeto sin llamar a retain).
  33. 33. Objective-C: Memoria La diferencia entre release y autorelease es que el primero decrementa al acto el contador y el segundo se espera al final del autoreleasepool actual.@autoreleasepool {...NSLog(@"Hello, World!");/* En este punto se decrementan todos los contadores afectadospor autorelease */}
  34. 34. Objective-C: Memoria Para las propiedades podemos indicar como queramos que se comporten:  assign: Crea una weak reference  retain: Crea una strong reference  copy: Copia el objeto (clona)@property (retain) Person *captain;
  35. 35. Objective-C: ARC Por suerte nos podemos olvidar de la gestión manual de memoria gracias a ARC que sí que está soportado en iOS NO hay ningún motivo para NO usar ARC y usar la gestión manual de memoria!
  36. 36. Objective-C: ARC La primera norma al usar ARC es muy simple:  NO llamar NUNCA a retain, release o autorelease. Nunca. Jamás.  Desde este punto de vista, puedes actuar como si tuvieses un GC 
  37. 37. Objective-C: ARC Para las propiedades NO usaremos assign o retain, en su lugar usaremos:  weak: Para especificar una propiedad mediante weak reference  strong: Para especificar una propiedad mediante strong reference
  38. 38. Objective-C: ARC ARC evita que un puntero que apunta a un objeto eliminado siga apuntando a un espacio de memoria “inválido” y lo asigna a nil.
  39. 39. Objective-C: Métodos estáticos ObjectiveC soporta métodos estáticos. Son los que empizan por + en su declaración:@interface Person : NSObject@property (copy) NSString *name;- (void)sayHello;+ (Person *)personWithName:(NSString *)name;@end El método personWithName es un método estático
  40. 40. Objective-C: Métodos init Si quieres crear un método init propio debes declararlo que devuelve id:- (id)init { self = [super init]; if (self) { _ammo = 1000; } return self; } self es el equivalente de this en C# y super es el equivalente de base en C#
  41. 41. Objective-C: Nombres En Objective-C se busca que los nombres de los métodos sean lo más informativos posibles No uses:- (id)shoot:(Ship *)aShip; Usa mejor:- (id)shootOtherShip:(Ship *)aShip;
  42. 42. Objective-C: Initialize El método estático initialize juega el mismo rol que el constructor estático en C#static Ship *_sharedShip;+ (void)initialize { if (self == [Ship class]) { _sharedShip = [[self alloc] init]; } }+ (Ship *)sharedShip { return _sharedShip; }
  43. 43. Objective-C: Métodos privados Objective-C NO tiene métodos privados. Se simulan NO colocando el método en la interfaz (@interface) de la clase  Recuerda: Los “usuarios” de una clase solo tienen acceso a su interfaz.
  44. 44. Objective-C: Categorías Una categoría ofrece un conjunto de métodos adicionales sobre una clase. Lo más parecido que tiene C# son los métodos de extensión Los métodos definidos en la categoría  Pueden usar los métodos de la clase que categorizan  Se pueden llamar con un puntero a la clase categorizada
  45. 45. Objective-C: Categorías Las categorías se declaran como una clase cuyo nombre es ClaseQueSeExtiende (NombreCategoría): Se definen como clases normales (@interface e @implementation) Dentro de una categoria  self se refiere al objeto de la clase que se extiende
  46. 46. Objective-C: Métodos protected Objective-C NO tiene el concepto de métodos protegidos Se pueden simular colocándolos todos en una categoría e incluir el .h de dicha categoría tan solo en las clases hijas.
  47. 47. Objective-C: Protocolos Un protocolo es un conjunto de métodos que una clase debe implementar. Son como los interfaces de C# salvo que un protocolo puede tener métodos “opcionales”. Una clase puede adoptar varios protocolos (al igual que en C# implementar varias interfaces)
  48. 48. Objective-C: Protocolos La definición es con @protocol:@protocol CoordinateSupport <NSObject>@property double x;- (NSArray *)arrayFromPosition;- (double)magnitude;@end La notación angular (<>) indica herencia de protocolos (CoordinateSupport hereda del protocolo NSObject)
  49. 49. Objective-C: Protocolos Para que una clase adopte un protocolo se usa la notación angular:@interface Person : NSObject <CoordinateSupport>@property (copy) NSString *name;@property (strong) NSMutableSet *friends;- (void)sayHello;- (void)sayGoodbye;@end Este código NO es correcto hasta que Person no implemente los métodos del protocolo
  50. 50. Objective-C: Protocolos Al igual que las interfaces en C# un protocolo define un tipo por si mismo. Aunque en Objective-C es un pesudo-tipo. Se puede indicar que un parámetro debe adoptar un protocolo:- (double)getDistanceFromObject:(id <CoordinateSupport>)theObject;
  51. 51. Tema 3Modelo de desarrollo deaplicaciones iOS
  52. 52. iOS – Modelo MVC Una aplicación iOS se construye mediante el patrón MVC  Modelo: Datos de la aplicación  View: Vista que muestra los datos (nib file)  Controller: Clase que enlaza la vista con el modelo
  53. 53. iOS – Vistas Ficheros nib (.xib) Contienen los controles de la vista, sus propiedades y los enlaces de eventos Equivaldría al XAML de WPF o a al Form.Designer.cs de Winforms
  54. 54. iOS – Controladores Contienen outlets y acciones  Outlet: Puntero que apunta a un control de la vista controlada  Action: Método llamado por un control de la vista Outlets y acciones se asocian mediante XCode
  55. 55. iOS – Controles son vistas Conceptualmente los controles iOS son vistas Algunos tienen su propio controlador  Caso de controles “complejos”
  56. 56. iOS – App Delegate Clase encargada de inicializar la aplicación.  Crea la vista inicial y su controlador  Coloca la vista inicial en la ventana Tiene métodos para que iOS le informe de ciertos casos (fin de aplicación, paso a back, etc) Equivale a la clase App de WPF
  57. 57. iOS – Aplicación single-view Contiene:  Una vista (fichero .xib)  Un controlador  Un application delegate
  58. 58. iOS – Rotación Puede ser: 1. Automática 2. Reposición de controles manual 3. Mediante dos vistas (landscape y portrait) 90% de aplicaciones tendrán sufienciente con (1)
  59. 59. iOS – Rotación automática iOS rota las vistas automáticamente Para que los controles se reposicionen correctamente deben establecerse las restricciones de posición  Funcionan de forma parecida a la propiedad Anchor de Winforms o Margin de WPF
  60. 60. iOS – Reposición manual Para layouts complejos puede ser necesario reposicionar los controles manualmente Usar método willAnimateRotationToInterfaceOrientation del controlador para posicionar los controles en su nueva posición
  61. 61. iOS – Rotación: dos vistas Para vistas complejas o funcionalidades distintas según orientación deberemos usar dos vistas Usar método willAnimateRotationToInterfaceOrientation del controlador para cambiar la vista según la orientación ¡Tener presente que todo está duplicado!
  62. 62. iOS – Aplicaciones multivista Constan de:  N vistas (.xib) secundarias  N controladores  Una vista principal con el control que permite el cambio de vista (ej Toolbar) y que realiza el cambio  El controlador de la vista principal
  63. 63. iOS – Control TableView  Necesita un delegado (UITableViewDelegate) y un DataSource (UITableViewDataSource)
  64. 64. iOS – Control TableView  Lista de datos  Agrupaciones de datos  Siempre tiene 1 columna  Personalizable
  65. 65. iOS – Control TableView  Necesita un delegado (UITableViewDelegate) y un DataSource (UITableViewDataSource)
  66. 66. iOS – Storyboards Permiten definir el flujo de una aplicación de forma gráfica “Agrupan” varios ficheros nib en uno solo Solo iOS 5 o superior
  67. 67. Eduard Tomàs @eiximenisetomas@pasiona.comeiximenis@techdencias.net Gracias!

×