SlideShare una empresa de Scribd logo
Eduard Tomàs
Introducción al desarrollo en
 iOS para desarrolladores
.NET
Master RIATec
10 apr
www.pasiona.com
info@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
Qué es



Microsoft                                 Innovación                                      Pasión
socio 100% alineado                       ligada a la mejora continua y basada            somos grandes entusiastas de todo
partner 100% especializado                en las nuevas oportunidades tecnológicas        aquello que creamos y vemos crecer


Desarrollo                                Tecnología                                      Experiencia
capacidad 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ón


Especialización                           Conocimiento                                    Valores humanos
ofrecemos soluciones a medida con         adquirido a través de la realización de         guía de lo que hacemos y pretendemos
las mejores herramientas tecnológicas     proyectos, formación e innovación tecnológica   que nos enseña y nos conduce día a día
Servicios
Consultoría   Proyectos       Auditoría




              Servicios                    Social      Formación
              profesionales                Media



                                          Innovación    Azure
Eduard Tomàs
Key Consultant en pasiona Consulting
Divulgador Tecnológico en Fundación Techdencias


   @eiximenis
etomas@pasiona.com     eiximenis@techdencias.net
Agenda
Un nuevo entorno: XCode
Un nuevo lenguaje: ObjectiveC
Modelo de desarrollo de aplicaciones iOS
Tema 1
Un nuevo entorno: XCode
XCode
 Xcode juega en iOS/MacOS el rol de Visual
  Studio
 IDE completo para desarrollar aplicaciones
  iOS y MacOS
   Lenguajes: C/C++, ObjectiveC
Tema 2
Un nuevo lenguaje: ObjectiveC
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
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
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.
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!
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
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.
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#
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
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
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#
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"];
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
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
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)
Objective-C: Propiedades
 Podemos implementarlas nosotros:
@property unsigned int age;

- (unsigned int)age { return _age; }
- (void)setAge:(unsigned int)age { _age = age; }
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;
}
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 (.)
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
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.
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
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.
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
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).
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 afectados
por autorelease */
}
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;
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!
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 
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
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.
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
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#
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;
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;
   }
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.
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
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
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.
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)
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)
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
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;
Tema 3
Modelo de desarrollo de
aplicaciones iOS
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
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
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
iOS – Controles son vistas
 Conceptualmente los controles iOS son vistas
 Algunos tienen su propio controlador
   Caso de controles “complejos”
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
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)
 90% de aplicaciones tendrán sufienciente con
  (1)
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
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
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!
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
iOS – Control TableView
                    Necesita un delegado

                     (UITableViewDelegate) y

                     un DataSource

                     (UITableViewDataSource)
iOS – Control TableView
                       Lista de datos

                       Agrupaciones de

                        datos

                       Siempre tiene 1

                        columna

                       Personalizable
iOS – Control TableView
                    Necesita un delegado

                     (UITableViewDelegate) y

                     un DataSource

                     (UITableViewDataSource)
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
Eduard Tomàs
  @eiximenis
etomas@pasiona.com
eiximenis@techdencias.net



                            Gracias!

Más contenido relacionado

La actualidad más candente

Definición de clases en POO
Definición de clases en POODefinición de clases en POO
Definición de clases en POO
Gloria Isabel Bautista Lasprilla
 
Tema5
Tema5Tema5
Programación orientada a objetos con c++
Programación orientada a objetos con c++Programación orientada a objetos con c++
Programación orientada a objetos con c++
Karime Hernández
 
Compu
CompuCompu
Adentrándonos a PHP 5
Adentrándonos a PHP 5Adentrándonos a PHP 5
Adentrándonos a PHP 5
Rodrigo Miranda
 
Polimorfismo en Java
Polimorfismo en JavaPolimorfismo en Java
Polimorfismo en Java
ricardomore94
 
Intro
IntroIntro
Intro
reivax
 
Curso iOS
Curso iOSCurso iOS
Curso iOS
Platzi
 
Polimorfismo
PolimorfismoPolimorfismo
Polimorfismo
ricardomore94
 
Tema2
Tema2Tema2
Des.Apli.Net 02.Sintaxis C Sharp
Des.Apli.Net 02.Sintaxis C SharpDes.Apli.Net 02.Sintaxis C Sharp
Des.Apli.Net 02.Sintaxis C Sharp
eriveraa
 
Buenas prácticas para la construcción de software
Buenas prácticas para la construcción de softwareBuenas prácticas para la construcción de software
Buenas prácticas para la construcción de software
Iker Canarias
 
Javascript Módulo 5 - javascript sentencia, expresión, variable, función - Un...
Javascript Módulo 5 - javascript sentencia, expresión, variable, función - Un...Javascript Módulo 5 - javascript sentencia, expresión, variable, función - Un...
Javascript Módulo 5 - javascript sentencia, expresión, variable, función - Un...
David Zapateria Besteiro
 
10 sintaxis oo
10 sintaxis oo10 sintaxis oo
10 sintaxis oo
Claribel Eusebio Nolasco
 
Programacion orientada a objetos Java
Programacion orientada a objetos JavaProgramacion orientada a objetos Java
Programacion orientada a objetos Java
Alexander Ramirez Melendez
 
Introduccion
IntroduccionIntroduccion
Introduccion
reivax
 
Tipos Datos y Operadores en Visual C# (C sharp)
Tipos Datos y Operadores en Visual C# (C sharp)Tipos Datos y Operadores en Visual C# (C sharp)
Tipos Datos y Operadores en Visual C# (C sharp)
Pedro Antonio Villalta (Pavillalta)
 
Fundamento de poo en php
Fundamento de poo en phpFundamento de poo en php
Fundamento de poo en php
Robert Moreira
 
Programacion kmi
Programacion kmiProgramacion kmi
Programacion kmi
Kmilitha Estrada
 
Fundamentos de programación Java
Fundamentos de programación JavaFundamentos de programación Java
Fundamentos de programación Java
quesada_diego
 

La actualidad más candente (20)

Definición de clases en POO
Definición de clases en POODefinición de clases en POO
Definición de clases en POO
 
Tema5
Tema5Tema5
Tema5
 
Programación orientada a objetos con c++
Programación orientada a objetos con c++Programación orientada a objetos con c++
Programación orientada a objetos con c++
 
Compu
CompuCompu
Compu
 
Adentrándonos a PHP 5
Adentrándonos a PHP 5Adentrándonos a PHP 5
Adentrándonos a PHP 5
 
Polimorfismo en Java
Polimorfismo en JavaPolimorfismo en Java
Polimorfismo en Java
 
Intro
IntroIntro
Intro
 
Curso iOS
Curso iOSCurso iOS
Curso iOS
 
Polimorfismo
PolimorfismoPolimorfismo
Polimorfismo
 
Tema2
Tema2Tema2
Tema2
 
Des.Apli.Net 02.Sintaxis C Sharp
Des.Apli.Net 02.Sintaxis C SharpDes.Apli.Net 02.Sintaxis C Sharp
Des.Apli.Net 02.Sintaxis C Sharp
 
Buenas prácticas para la construcción de software
Buenas prácticas para la construcción de softwareBuenas prácticas para la construcción de software
Buenas prácticas para la construcción de software
 
Javascript Módulo 5 - javascript sentencia, expresión, variable, función - Un...
Javascript Módulo 5 - javascript sentencia, expresión, variable, función - Un...Javascript Módulo 5 - javascript sentencia, expresión, variable, función - Un...
Javascript Módulo 5 - javascript sentencia, expresión, variable, función - Un...
 
10 sintaxis oo
10 sintaxis oo10 sintaxis oo
10 sintaxis oo
 
Programacion orientada a objetos Java
Programacion orientada a objetos JavaProgramacion orientada a objetos Java
Programacion orientada a objetos Java
 
Introduccion
IntroduccionIntroduccion
Introduccion
 
Tipos Datos y Operadores en Visual C# (C sharp)
Tipos Datos y Operadores en Visual C# (C sharp)Tipos Datos y Operadores en Visual C# (C sharp)
Tipos Datos y Operadores en Visual C# (C sharp)
 
Fundamento de poo en php
Fundamento de poo en phpFundamento de poo en php
Fundamento de poo en php
 
Programacion kmi
Programacion kmiProgramacion kmi
Programacion kmi
 
Fundamentos de programación Java
Fundamentos de programación JavaFundamentos de programación Java
Fundamentos de programación Java
 

Destacado

Introducción al desarrollo de videojuegos 2D con Wave Engine
Introducción al desarrollo de videojuegos 2D con Wave EngineIntroducción al desarrollo de videojuegos 2D con Wave Engine
Introducción al desarrollo de videojuegos 2D con Wave Engine
Eduard Tomàs
 
JavaScript - HTML5 - IndexedDb
JavaScript - HTML5 - IndexedDbJavaScript - HTML5 - IndexedDb
JavaScript - HTML5 - IndexedDb
Eduard Tomàs
 
Microsoft Code Contracts
Microsoft Code ContractsMicrosoft Code Contracts
Microsoft Code Contracts
Eduard Tomàs
 
Winobjc - Windows Bridge for iOS
Winobjc - Windows Bridge for iOSWinobjc - Windows Bridge for iOS
Winobjc - Windows Bridge for iOS
Eduard Tomàs
 
Asp.Net vNext - La revolución que viene
Asp.Net vNext - La revolución que vieneAsp.Net vNext - La revolución que viene
Asp.Net vNext - La revolución que viene
Eduard Tomàs
 
Aplicaciones Metro UI para Windows8 con C# y XAML (12 horas Visual Studio)
Aplicaciones Metro UI para Windows8 con C# y XAML (12 horas Visual Studio)Aplicaciones Metro UI para Windows8 con C# y XAML (12 horas Visual Studio)
Aplicaciones Metro UI para Windows8 con C# y XAML (12 horas Visual Studio)
Eduard Tomàs
 
Introducción a ReactJS
Introducción a ReactJSIntroducción a ReactJS
Introducción a ReactJS
Eduard Tomàs
 
EcmaScript unchained
EcmaScript unchainedEcmaScript unchained
EcmaScript unchained
Eduard Tomàs
 
MongoDb (BcnDevCon Nov 2011)
MongoDb (BcnDevCon Nov 2011)MongoDb (BcnDevCon Nov 2011)
MongoDb (BcnDevCon Nov 2011)
Eduard Tomàs
 
#netIO 1 - Ecosistema .NET
#netIO 1 - Ecosistema .NET#netIO 1 - Ecosistema .NET
#netIO 1 - Ecosistema .NET
Eduard Tomàs
 
React native - t3chfest 2016
React native - t3chfest 2016React native - t3chfest 2016
React native - t3chfest 2016
Eduard Tomàs
 
ASP.NET vNext... Desarrollo cross platform
ASP.NET vNext... Desarrollo cross platformASP.NET vNext... Desarrollo cross platform
ASP.NET vNext... Desarrollo cross platform
Eduard Tomàs
 
Interfaces rest
Interfaces restInterfaces rest
Interfaces rest
Eduard Tomàs
 
Handlebars
HandlebarsHandlebars
Handlebars
Eduard Tomàs
 
Una tapa de ecmascript 6
Una tapa de ecmascript 6Una tapa de ecmascript 6
Una tapa de ecmascript 6
Eduard Tomàs
 
React native - Unleash the power of your device
React native - Unleash the power of your deviceReact native - Unleash the power of your device
React native - Unleash the power of your device
Eduard Tomàs
 
Vista aérea de los lenguajes de programación
Vista aérea de los lenguajes de programaciónVista aérea de los lenguajes de programación
Vista aérea de los lenguajes de programación
Eduard Tomàs
 
Async / Await: Programación asíncrona para dummies (12 horas visual studio)
Async / Await: Programación asíncrona para dummies (12 horas visual studio)Async / Await: Programación asíncrona para dummies (12 horas visual studio)
Async / Await: Programación asíncrona para dummies (12 horas visual studio)
Eduard Tomàs
 
JavaScript in 2016 (Codemotion Rome)
JavaScript in 2016 (Codemotion Rome)JavaScript in 2016 (Codemotion Rome)
JavaScript in 2016 (Codemotion Rome)
Eduard Tomàs
 
Novedades de ASP.NET MVC6
Novedades de ASP.NET MVC6Novedades de ASP.NET MVC6
Novedades de ASP.NET MVC6
Eduard Tomàs
 

Destacado (20)

Introducción al desarrollo de videojuegos 2D con Wave Engine
Introducción al desarrollo de videojuegos 2D con Wave EngineIntroducción al desarrollo de videojuegos 2D con Wave Engine
Introducción al desarrollo de videojuegos 2D con Wave Engine
 
JavaScript - HTML5 - IndexedDb
JavaScript - HTML5 - IndexedDbJavaScript - HTML5 - IndexedDb
JavaScript - HTML5 - IndexedDb
 
Microsoft Code Contracts
Microsoft Code ContractsMicrosoft Code Contracts
Microsoft Code Contracts
 
Winobjc - Windows Bridge for iOS
Winobjc - Windows Bridge for iOSWinobjc - Windows Bridge for iOS
Winobjc - Windows Bridge for iOS
 
Asp.Net vNext - La revolución que viene
Asp.Net vNext - La revolución que vieneAsp.Net vNext - La revolución que viene
Asp.Net vNext - La revolución que viene
 
Aplicaciones Metro UI para Windows8 con C# y XAML (12 horas Visual Studio)
Aplicaciones Metro UI para Windows8 con C# y XAML (12 horas Visual Studio)Aplicaciones Metro UI para Windows8 con C# y XAML (12 horas Visual Studio)
Aplicaciones Metro UI para Windows8 con C# y XAML (12 horas Visual Studio)
 
Introducción a ReactJS
Introducción a ReactJSIntroducción a ReactJS
Introducción a ReactJS
 
EcmaScript unchained
EcmaScript unchainedEcmaScript unchained
EcmaScript unchained
 
MongoDb (BcnDevCon Nov 2011)
MongoDb (BcnDevCon Nov 2011)MongoDb (BcnDevCon Nov 2011)
MongoDb (BcnDevCon Nov 2011)
 
#netIO 1 - Ecosistema .NET
#netIO 1 - Ecosistema .NET#netIO 1 - Ecosistema .NET
#netIO 1 - Ecosistema .NET
 
React native - t3chfest 2016
React native - t3chfest 2016React native - t3chfest 2016
React native - t3chfest 2016
 
ASP.NET vNext... Desarrollo cross platform
ASP.NET vNext... Desarrollo cross platformASP.NET vNext... Desarrollo cross platform
ASP.NET vNext... Desarrollo cross platform
 
Interfaces rest
Interfaces restInterfaces rest
Interfaces rest
 
Handlebars
HandlebarsHandlebars
Handlebars
 
Una tapa de ecmascript 6
Una tapa de ecmascript 6Una tapa de ecmascript 6
Una tapa de ecmascript 6
 
React native - Unleash the power of your device
React native - Unleash the power of your deviceReact native - Unleash the power of your device
React native - Unleash the power of your device
 
Vista aérea de los lenguajes de programación
Vista aérea de los lenguajes de programaciónVista aérea de los lenguajes de programación
Vista aérea de los lenguajes de programación
 
Async / Await: Programación asíncrona para dummies (12 horas visual studio)
Async / Await: Programación asíncrona para dummies (12 horas visual studio)Async / Await: Programación asíncrona para dummies (12 horas visual studio)
Async / Await: Programación asíncrona para dummies (12 horas visual studio)
 
JavaScript in 2016 (Codemotion Rome)
JavaScript in 2016 (Codemotion Rome)JavaScript in 2016 (Codemotion Rome)
JavaScript in 2016 (Codemotion Rome)
 
Novedades de ASP.NET MVC6
Novedades de ASP.NET MVC6Novedades de ASP.NET MVC6
Novedades de ASP.NET MVC6
 

Similar a Introducción a ObjectiveC e IOS

Tema 1 2_poo
Tema 1 2_pooTema 1 2_poo
Tema 1 2_poo
demon_628
 
Que es visual c# eduardo sorto
Que es visual c# eduardo sortoQue es visual c# eduardo sorto
Que es visual c# eduardo sorto
eduardo sorto
 
Visual basic .NET
Visual basic .NETVisual basic .NET
Visual basic .NET
Jamel Navarro
 
POO.pdf
POO.pdfPOO.pdf
POO5-Cpp-0910.pdf
POO5-Cpp-0910.pdfPOO5-Cpp-0910.pdf
POO5-Cpp-0910.pdf
Manuel Uroz Sorroche
 
Lenguaje c ++ guía para programadores
Lenguaje c ++  guía para programadoresLenguaje c ++  guía para programadores
Lenguaje c ++ guía para programadores
Aldo Hernán Zanabria Gálvez
 
Semana2 clases
Semana2 clasesSemana2 clases
Semana2 clases
DANILOJOSEDONADOSAND
 
Lenguaje de la programación orientada a objetos c#
Lenguaje de la programación orientada a objetos c#Lenguaje de la programación orientada a objetos c#
Lenguaje de la programación orientada a objetos c#
Juan Carlos Prieto
 
Curso basico c sharp
Curso basico c sharpCurso basico c sharp
Curso basico c sharp
Esteban Zuñiga Barrios
 
Met2 07 01-introduccion_poo
Met2 07 01-introduccion_pooMet2 07 01-introduccion_poo
Met2 07 01-introduccion_poo
Aldo Hernán Zanabria Gálvez
 
Csharp
CsharpCsharp
Clase numero 6
Clase numero 6Clase numero 6
Clase numero 6
cesitar2010
 
Curso basico c sharp
Curso basico c sharpCurso basico c sharp
Curso basico c sharp
fusilero
 
C ++
C ++C ++
Diapositivs~Elementos_basicos_C.pdf
Diapositivs~Elementos_basicos_C.pdfDiapositivs~Elementos_basicos_C.pdf
Diapositivs~Elementos_basicos_C.pdf
FtimaAF
 
Elementos básicos de un lenguaje de alto nivel
Elementos básicos de un lenguaje de alto nivelElementos básicos de un lenguaje de alto nivel
Elementos básicos de un lenguaje de alto nivel
Ricardo Axel
 
A1 u1-16230227
A1 u1-16230227A1 u1-16230227
A1 u1-16230227
erikalejo
 
C sharp
C sharpC sharp
C sharp
Aleja Zapata
 
Microsoft Reactor - Creando un modelo de Regresión con Azure Machine Learnin...
Microsoft Reactor - Creando un modelo de Regresión con Azure Machine Learnin...Microsoft Reactor - Creando un modelo de Regresión con Azure Machine Learnin...
Microsoft Reactor - Creando un modelo de Regresión con Azure Machine Learnin...
Luis775803
 
manual de C#
manual de C#manual de C#
manual de C#
Brendita Martinez
 

Similar a Introducción a ObjectiveC e IOS (20)

Tema 1 2_poo
Tema 1 2_pooTema 1 2_poo
Tema 1 2_poo
 
Que es visual c# eduardo sorto
Que es visual c# eduardo sortoQue es visual c# eduardo sorto
Que es visual c# eduardo sorto
 
Visual basic .NET
Visual basic .NETVisual basic .NET
Visual basic .NET
 
POO.pdf
POO.pdfPOO.pdf
POO.pdf
 
POO5-Cpp-0910.pdf
POO5-Cpp-0910.pdfPOO5-Cpp-0910.pdf
POO5-Cpp-0910.pdf
 
Lenguaje c ++ guía para programadores
Lenguaje c ++  guía para programadoresLenguaje c ++  guía para programadores
Lenguaje c ++ guía para programadores
 
Semana2 clases
Semana2 clasesSemana2 clases
Semana2 clases
 
Lenguaje de la programación orientada a objetos c#
Lenguaje de la programación orientada a objetos c#Lenguaje de la programación orientada a objetos c#
Lenguaje de la programación orientada a objetos c#
 
Curso basico c sharp
Curso basico c sharpCurso basico c sharp
Curso basico c sharp
 
Met2 07 01-introduccion_poo
Met2 07 01-introduccion_pooMet2 07 01-introduccion_poo
Met2 07 01-introduccion_poo
 
Csharp
CsharpCsharp
Csharp
 
Clase numero 6
Clase numero 6Clase numero 6
Clase numero 6
 
Curso basico c sharp
Curso basico c sharpCurso basico c sharp
Curso basico c sharp
 
C ++
C ++C ++
C ++
 
Diapositivs~Elementos_basicos_C.pdf
Diapositivs~Elementos_basicos_C.pdfDiapositivs~Elementos_basicos_C.pdf
Diapositivs~Elementos_basicos_C.pdf
 
Elementos básicos de un lenguaje de alto nivel
Elementos básicos de un lenguaje de alto nivelElementos básicos de un lenguaje de alto nivel
Elementos básicos de un lenguaje de alto nivel
 
A1 u1-16230227
A1 u1-16230227A1 u1-16230227
A1 u1-16230227
 
C sharp
C sharpC sharp
C sharp
 
Microsoft Reactor - Creando un modelo de Regresión con Azure Machine Learnin...
Microsoft Reactor - Creando un modelo de Regresión con Azure Machine Learnin...Microsoft Reactor - Creando un modelo de Regresión con Azure Machine Learnin...
Microsoft Reactor - Creando un modelo de Regresión con Azure Machine Learnin...
 
manual de C#
manual de C#manual de C#
manual de C#
 

Más de Eduard Tomàs

Kubernetes: Do's, don'ts and why's
Kubernetes: Do's, don'ts and why'sKubernetes: Do's, don'ts and why's
Kubernetes: Do's, don'ts and why's
Eduard Tomàs
 
KCDS 2021- Escalando workloads serverless en Kubernetes con KEDA
KCDS 2021- Escalando workloads serverless en Kubernetes con KEDAKCDS 2021- Escalando workloads serverless en Kubernetes con KEDA
KCDS 2021- Escalando workloads serverless en Kubernetes con KEDA
Eduard Tomàs
 
Escalando workloads serverless en Kubernetes con Keda
Escalando workloads serverless en Kubernetes con KedaEscalando workloads serverless en Kubernetes con Keda
Escalando workloads serverless en Kubernetes con Keda
Eduard Tomàs
 
C#9 - Más C# que nunca
C#9 - Más C# que nuncaC#9 - Más C# que nunca
C#9 - Más C# que nunca
Eduard Tomàs
 
CollabDays 2020 Barcelona - Serverless Kubernetes with KEDA
CollabDays 2020 Barcelona - Serverless Kubernetes with KEDACollabDays 2020 Barcelona - Serverless Kubernetes with KEDA
CollabDays 2020 Barcelona - Serverless Kubernetes with KEDA
Eduard Tomàs
 
Keda o como convertir Kubernetess en Serverless
Keda o como convertir Kubernetess en ServerlessKeda o como convertir Kubernetess en Serverless
Keda o como convertir Kubernetess en Serverless
Eduard Tomàs
 
.NET Memoria y Rendimiento
.NET Memoria y Rendimiento.NET Memoria y Rendimiento
.NET Memoria y Rendimiento
Eduard Tomàs
 
Containers en .NET (Dot Net 2018 - Spain)
Containers en .NET (Dot Net 2018 - Spain)Containers en .NET (Dot Net 2018 - Spain)
Containers en .NET (Dot Net 2018 - Spain)
Eduard Tomàs
 
Esos contenedores, ¡a producción! (Commit Conf 2018)
Esos contenedores, ¡a producción! (Commit Conf 2018)Esos contenedores, ¡a producción! (Commit Conf 2018)
Esos contenedores, ¡a producción! (Commit Conf 2018)
Eduard Tomàs
 
Codemotion 2015 - Bienvenido de nuevo c++
Codemotion 2015 - Bienvenido de nuevo c++Codemotion 2015 - Bienvenido de nuevo c++
Codemotion 2015 - Bienvenido de nuevo c++
Eduard Tomàs
 
El "peor" lenguaje del mundo
El "peor" lenguaje del mundoEl "peor" lenguaje del mundo
El "peor" lenguaje del mundo
Eduard Tomàs
 
Containerize a netcore application with aks
 Containerize a netcore application with aks Containerize a netcore application with aks
Containerize a netcore application with aks
Eduard Tomàs
 
Escenarios avanzados en AKS (Global Azure Bootcamp Barcelona 2019)
Escenarios avanzados en AKS (Global Azure Bootcamp Barcelona 2019)Escenarios avanzados en AKS (Global Azure Bootcamp Barcelona 2019)
Escenarios avanzados en AKS (Global Azure Bootcamp Barcelona 2019)
Eduard Tomàs
 
Aplicaciones de consola fáciles? Más quisieramos
Aplicaciones de consola fáciles? Más quisieramosAplicaciones de consola fáciles? Más quisieramos
Aplicaciones de consola fáciles? Más quisieramos
Eduard Tomàs
 
Serverless with Azure Functions and CosmosDb
Serverless with Azure Functions and CosmosDbServerless with Azure Functions and CosmosDb
Serverless with Azure Functions and CosmosDb
Eduard Tomàs
 
Docker y todo eso... más o menos
Docker y todo eso... más o menosDocker y todo eso... más o menos
Docker y todo eso... más o menos
Eduard Tomàs
 
Microservices: Yes or not?
Microservices: Yes or not?Microservices: Yes or not?
Microservices: Yes or not?
Eduard Tomàs
 
ASP.NET MVC Core
ASP.NET MVC CoreASP.NET MVC Core
ASP.NET MVC Core
Eduard Tomàs
 
Azure functions
Azure functionsAzure functions
Azure functions
Eduard Tomàs
 
Asp.Net Core 1.0 Deep Dive
Asp.Net Core 1.0 Deep DiveAsp.Net Core 1.0 Deep Dive
Asp.Net Core 1.0 Deep Dive
Eduard Tomàs
 

Más de Eduard Tomàs (20)

Kubernetes: Do's, don'ts and why's
Kubernetes: Do's, don'ts and why'sKubernetes: Do's, don'ts and why's
Kubernetes: Do's, don'ts and why's
 
KCDS 2021- Escalando workloads serverless en Kubernetes con KEDA
KCDS 2021- Escalando workloads serverless en Kubernetes con KEDAKCDS 2021- Escalando workloads serverless en Kubernetes con KEDA
KCDS 2021- Escalando workloads serverless en Kubernetes con KEDA
 
Escalando workloads serverless en Kubernetes con Keda
Escalando workloads serverless en Kubernetes con KedaEscalando workloads serverless en Kubernetes con Keda
Escalando workloads serverless en Kubernetes con Keda
 
C#9 - Más C# que nunca
C#9 - Más C# que nuncaC#9 - Más C# que nunca
C#9 - Más C# que nunca
 
CollabDays 2020 Barcelona - Serverless Kubernetes with KEDA
CollabDays 2020 Barcelona - Serverless Kubernetes with KEDACollabDays 2020 Barcelona - Serverless Kubernetes with KEDA
CollabDays 2020 Barcelona - Serverless Kubernetes with KEDA
 
Keda o como convertir Kubernetess en Serverless
Keda o como convertir Kubernetess en ServerlessKeda o como convertir Kubernetess en Serverless
Keda o como convertir Kubernetess en Serverless
 
.NET Memoria y Rendimiento
.NET Memoria y Rendimiento.NET Memoria y Rendimiento
.NET Memoria y Rendimiento
 
Containers en .NET (Dot Net 2018 - Spain)
Containers en .NET (Dot Net 2018 - Spain)Containers en .NET (Dot Net 2018 - Spain)
Containers en .NET (Dot Net 2018 - Spain)
 
Esos contenedores, ¡a producción! (Commit Conf 2018)
Esos contenedores, ¡a producción! (Commit Conf 2018)Esos contenedores, ¡a producción! (Commit Conf 2018)
Esos contenedores, ¡a producción! (Commit Conf 2018)
 
Codemotion 2015 - Bienvenido de nuevo c++
Codemotion 2015 - Bienvenido de nuevo c++Codemotion 2015 - Bienvenido de nuevo c++
Codemotion 2015 - Bienvenido de nuevo c++
 
El "peor" lenguaje del mundo
El "peor" lenguaje del mundoEl "peor" lenguaje del mundo
El "peor" lenguaje del mundo
 
Containerize a netcore application with aks
 Containerize a netcore application with aks Containerize a netcore application with aks
Containerize a netcore application with aks
 
Escenarios avanzados en AKS (Global Azure Bootcamp Barcelona 2019)
Escenarios avanzados en AKS (Global Azure Bootcamp Barcelona 2019)Escenarios avanzados en AKS (Global Azure Bootcamp Barcelona 2019)
Escenarios avanzados en AKS (Global Azure Bootcamp Barcelona 2019)
 
Aplicaciones de consola fáciles? Más quisieramos
Aplicaciones de consola fáciles? Más quisieramosAplicaciones de consola fáciles? Más quisieramos
Aplicaciones de consola fáciles? Más quisieramos
 
Serverless with Azure Functions and CosmosDb
Serverless with Azure Functions and CosmosDbServerless with Azure Functions and CosmosDb
Serverless with Azure Functions and CosmosDb
 
Docker y todo eso... más o menos
Docker y todo eso... más o menosDocker y todo eso... más o menos
Docker y todo eso... más o menos
 
Microservices: Yes or not?
Microservices: Yes or not?Microservices: Yes or not?
Microservices: Yes or not?
 
ASP.NET MVC Core
ASP.NET MVC CoreASP.NET MVC Core
ASP.NET MVC Core
 
Azure functions
Azure functionsAzure functions
Azure functions
 
Asp.Net Core 1.0 Deep Dive
Asp.Net Core 1.0 Deep DiveAsp.Net Core 1.0 Deep Dive
Asp.Net Core 1.0 Deep Dive
 

Último

herramientas de sitio web 3.0 2024
herramientas de sitio web 3.0  2024herramientas de sitio web 3.0  2024
herramientas de sitio web 3.0 2024
julio05042006
 
Second Life, informe de actividad del maestro Tapia
Second Life, informe de actividad del maestro TapiaSecond Life, informe de actividad del maestro Tapia
Second Life, informe de actividad del maestro Tapia
al050121024
 
Programming & Artificial Intelligence ebook.pdf
Programming & Artificial Intelligence ebook.pdfProgramming & Artificial Intelligence ebook.pdf
Programming & Artificial Intelligence ebook.pdf
Manuel Diaz
 
PLAN DE MANTENMIENTO preventivo de un equipo de computo.pdf
PLAN DE MANTENMIENTO preventivo de un equipo de computo.pdfPLAN DE MANTENMIENTO preventivo de un equipo de computo.pdf
PLAN DE MANTENMIENTO preventivo de un equipo de computo.pdf
70244530
 
mantenimiento de chasis y carroceria1.pptx
mantenimiento de chasis y carroceria1.pptxmantenimiento de chasis y carroceria1.pptx
mantenimiento de chasis y carroceria1.pptx
MiguelAtencio10
 
Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...
Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...
Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...
AMADO SALVADOR
 
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdfProjecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Festibity
 
Informació Projecte Iniciativa TIC SOPRA STERIA.pdf
Informació Projecte Iniciativa TIC SOPRA STERIA.pdfInformació Projecte Iniciativa TIC SOPRA STERIA.pdf
Informació Projecte Iniciativa TIC SOPRA STERIA.pdf
Festibity
 
HERRAMIENTAS WEB--------------------.pptx
HERRAMIENTAS WEB--------------------.pptxHERRAMIENTAS WEB--------------------.pptx
HERRAMIENTAS WEB--------------------.pptx
maralache30
 
Manual de Soporte y mantenimiento de equipo de cómputos
Manual de Soporte y mantenimiento de equipo de cómputosManual de Soporte y mantenimiento de equipo de cómputos
Manual de Soporte y mantenimiento de equipo de cómputos
cbtechchihuahua
 
Inteligencia Artificial
Inteligencia ArtificialInteligencia Artificial
Inteligencia Artificial
YashiraPaye
 
TIC en educacion.rtf.docxlolololololololo
TIC en educacion.rtf.docxlolololololololoTIC en educacion.rtf.docxlolololololololo
TIC en educacion.rtf.docxlolololololololo
KukiiSanchez
 
Manual de soporte y mantenimiento de equipo de cómputo
Manual de soporte y mantenimiento de equipo de cómputoManual de soporte y mantenimiento de equipo de cómputo
Manual de soporte y mantenimiento de equipo de cómputo
doctorsoluciones34
 
Sitios web 3.0 funciones ventajas y desventajas
Sitios web 3.0 funciones ventajas y desventajasSitios web 3.0 funciones ventajas y desventajas
Sitios web 3.0 funciones ventajas y desventajas
paulroyal74
 
MONOGRAFIA memoria RAM.docx trabajo DE TECNOLOGIA
MONOGRAFIA memoria RAM.docx trabajo DE TECNOLOGIAMONOGRAFIA memoria RAM.docx trabajo DE TECNOLOGIA
MONOGRAFIA memoria RAM.docx trabajo DE TECNOLOGIA
leia ereni
 
REVISTA TECNOLOGICA PARA EL DESARROLLO HUMANO
REVISTA TECNOLOGICA PARA EL DESARROLLO HUMANOREVISTA TECNOLOGICA PARA EL DESARROLLO HUMANO
REVISTA TECNOLOGICA PARA EL DESARROLLO HUMANO
gisellearanguren1
 
Infografia TCP/IP (Transmission Control Protocol/Internet Protocol)
Infografia TCP/IP (Transmission Control Protocol/Internet Protocol)Infografia TCP/IP (Transmission Control Protocol/Internet Protocol)
Infografia TCP/IP (Transmission Control Protocol/Internet Protocol)
codesiret
 
Projecte Iniciativa TIC 2024 SOPRA STERIA. inCV.pdf
Projecte Iniciativa TIC 2024 SOPRA STERIA. inCV.pdfProjecte Iniciativa TIC 2024 SOPRA STERIA. inCV.pdf
Projecte Iniciativa TIC 2024 SOPRA STERIA. inCV.pdf
Festibity
 
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)
AbrahamCastillo42
 
Presentación de Tic en educación y sobre blogger
Presentación de Tic en educación y sobre bloggerPresentación de Tic en educación y sobre blogger
Presentación de Tic en educación y sobre blogger
larapalaciosmonzon28
 

Último (20)

herramientas de sitio web 3.0 2024
herramientas de sitio web 3.0  2024herramientas de sitio web 3.0  2024
herramientas de sitio web 3.0 2024
 
Second Life, informe de actividad del maestro Tapia
Second Life, informe de actividad del maestro TapiaSecond Life, informe de actividad del maestro Tapia
Second Life, informe de actividad del maestro Tapia
 
Programming & Artificial Intelligence ebook.pdf
Programming & Artificial Intelligence ebook.pdfProgramming & Artificial Intelligence ebook.pdf
Programming & Artificial Intelligence ebook.pdf
 
PLAN DE MANTENMIENTO preventivo de un equipo de computo.pdf
PLAN DE MANTENMIENTO preventivo de un equipo de computo.pdfPLAN DE MANTENMIENTO preventivo de un equipo de computo.pdf
PLAN DE MANTENMIENTO preventivo de un equipo de computo.pdf
 
mantenimiento de chasis y carroceria1.pptx
mantenimiento de chasis y carroceria1.pptxmantenimiento de chasis y carroceria1.pptx
mantenimiento de chasis y carroceria1.pptx
 
Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...
Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...
Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...
 
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdfProjecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
 
Informació Projecte Iniciativa TIC SOPRA STERIA.pdf
Informació Projecte Iniciativa TIC SOPRA STERIA.pdfInformació Projecte Iniciativa TIC SOPRA STERIA.pdf
Informació Projecte Iniciativa TIC SOPRA STERIA.pdf
 
HERRAMIENTAS WEB--------------------.pptx
HERRAMIENTAS WEB--------------------.pptxHERRAMIENTAS WEB--------------------.pptx
HERRAMIENTAS WEB--------------------.pptx
 
Manual de Soporte y mantenimiento de equipo de cómputos
Manual de Soporte y mantenimiento de equipo de cómputosManual de Soporte y mantenimiento de equipo de cómputos
Manual de Soporte y mantenimiento de equipo de cómputos
 
Inteligencia Artificial
Inteligencia ArtificialInteligencia Artificial
Inteligencia Artificial
 
TIC en educacion.rtf.docxlolololololololo
TIC en educacion.rtf.docxlolololololololoTIC en educacion.rtf.docxlolololololololo
TIC en educacion.rtf.docxlolololololololo
 
Manual de soporte y mantenimiento de equipo de cómputo
Manual de soporte y mantenimiento de equipo de cómputoManual de soporte y mantenimiento de equipo de cómputo
Manual de soporte y mantenimiento de equipo de cómputo
 
Sitios web 3.0 funciones ventajas y desventajas
Sitios web 3.0 funciones ventajas y desventajasSitios web 3.0 funciones ventajas y desventajas
Sitios web 3.0 funciones ventajas y desventajas
 
MONOGRAFIA memoria RAM.docx trabajo DE TECNOLOGIA
MONOGRAFIA memoria RAM.docx trabajo DE TECNOLOGIAMONOGRAFIA memoria RAM.docx trabajo DE TECNOLOGIA
MONOGRAFIA memoria RAM.docx trabajo DE TECNOLOGIA
 
REVISTA TECNOLOGICA PARA EL DESARROLLO HUMANO
REVISTA TECNOLOGICA PARA EL DESARROLLO HUMANOREVISTA TECNOLOGICA PARA EL DESARROLLO HUMANO
REVISTA TECNOLOGICA PARA EL DESARROLLO HUMANO
 
Infografia TCP/IP (Transmission Control Protocol/Internet Protocol)
Infografia TCP/IP (Transmission Control Protocol/Internet Protocol)Infografia TCP/IP (Transmission Control Protocol/Internet Protocol)
Infografia TCP/IP (Transmission Control Protocol/Internet Protocol)
 
Projecte Iniciativa TIC 2024 SOPRA STERIA. inCV.pdf
Projecte Iniciativa TIC 2024 SOPRA STERIA. inCV.pdfProjecte Iniciativa TIC 2024 SOPRA STERIA. inCV.pdf
Projecte Iniciativa TIC 2024 SOPRA STERIA. inCV.pdf
 
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)
 
Presentación de Tic en educación y sobre blogger
Presentación de Tic en educación y sobre bloggerPresentación de Tic en educación y sobre blogger
Presentación de Tic en educación y sobre blogger
 

Introducción a ObjectiveC e IOS

  • 1. Eduard Tomàs Introducción al desarrollo en iOS para desarrolladores .NET Master RIATec 10 apr
  • 2. www.pasiona.com info@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. Qué es Microsoft Innovación Pasión socio 100% alineado ligada a la mejora continua y basada somos grandes entusiastas de todo partner 100% especializado en las nuevas oportunidades tecnológicas aquello que creamos y vemos crecer Desarrollo Tecnología Experiencia capacidad 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ón Especialización Conocimiento Valores humanos ofrecemos soluciones a medida con adquirido a través de la realización de guía de lo que hacemos y pretendemos las 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. Servicios Consultoría Proyectos Auditoría Servicios Social Formación profesionales Media Innovación Azure
  • 5. Eduard Tomàs Key Consultant en pasiona Consulting Divulgador Tecnológico en Fundación Techdencias @eiximenis etomas@pasiona.com eiximenis@techdencias.net
  • 6. Agenda Un nuevo entorno: XCode Un nuevo lenguaje: ObjectiveC Modelo de desarrollo de aplicaciones iOS
  • 7. Tema 1 Un nuevo entorno: XCode
  • 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. Tema 2 Un nuevo lenguaje: ObjectiveC
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Objective-C: Propiedades  Podemos implementarlas nosotros: @property unsigned int age; - (unsigned int)age { return _age; } - (void)setAge:(unsigned int)age { _age = age; }
  • 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. 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. 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. 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. 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. 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. 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. 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. 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 afectados por autorelease */ }
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Tema 3 Modelo de desarrollo de aplicaciones iOS
  • 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. 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. 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. iOS – Controles son vistas  Conceptualmente los controles iOS son vistas  Algunos tienen su propio controlador  Caso de controles “complejos”
  • 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. iOS – Aplicación single-view  Contiene:  Una vista (fichero .xib)  Un controlador  Un application delegate
  • 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. 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. 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. 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. 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. iOS – Control TableView  Necesita un delegado (UITableViewDelegate) y un DataSource (UITableViewDataSource)
  • 64. iOS – Control TableView  Lista de datos  Agrupaciones de datos  Siempre tiene 1 columna  Personalizable
  • 65. iOS – Control TableView  Necesita un delegado (UITableViewDelegate) y un DataSource (UITableViewDataSource)
  • 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. Eduard Tomàs @eiximenis etomas@pasiona.com eiximenis@techdencias.net Gracias!