48
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles © 2011-2012 Depto. Ciencia de la Computación e IA Plataforma iOS Sesión 1: Xcode y Objective-C

Presentación de PowerPoint - ua · • Adobe Flash CS5.5 3. ... • Edición del código fuente, interfaz y fichero de configuración. ... Fases de la construcción • Indica para

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Presentación de PowerPoint - ua · • Adobe Flash CS5.5 3. ... • Edición del código fuente, interfaz y fichero de configuración. ... Fases de la construcción • Indica para

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2011-2012 Depto. Ciencia de la Computación e IA

Plataforma iOS

Sesión 1: Xcode y Objective-C

Page 2: Presentación de PowerPoint - ua · • Adobe Flash CS5.5 3. ... • Edición del código fuente, interfaz y fichero de configuración. ... Fases de la construcción • Indica para

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Plataforma iOS © 2011-2012 Depto. Ciencia de la Computación e IA Xcode y Objective-C

Puntos a tratar• Entorno Xcode• Tipos de datos• Paso de mensajes• Manejo de cadenas• Localización• Clases y objetos• Gestión de la memoria• Clases útiles

2

Page 3: Presentación de PowerPoint - ua · • Adobe Flash CS5.5 3. ... • Edición del código fuente, interfaz y fichero de configuración. ... Fases de la construcción • Indica para

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Plataforma iOS © 2011-2012 Depto. Ciencia de la Computación e IA Xcode y Objective-C

Desarrollo para iOS

• Debe realizarse desde el entorno Xcode• Sólo disponible en Mac

• Se programa en Objective-C• Podemos incluir también código C, C++, u Objective-C++

• Algunas herramientas generan aplicaciones iOS• Unreal Development Kit• Adobe Flash CS5.5

3

Page 4: Presentación de PowerPoint - ua · • Adobe Flash CS5.5 3. ... • Edición del código fuente, interfaz y fichero de configuración. ... Fases de la construcción • Indica para

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Plataforma iOS © 2011-2012 Depto. Ciencia de la Computación e IA Xcode y Objective-C

Entorno Xcode

• Nos centraremos en la versión 4.x de este entorno• Existen grandes diferencias respecto a la versión 3.x

• Debemos descargar Xcode + iOS SDK• Se descarga desde la Mac App Store (a partir de Lion)• Versión de Snow Leopard disponible sólo para suscriptores

• Para cada nueva versión de iOS debemos descargar el SDK• Versión 4.2 soporta iOS 4.0 a 5.0.1• Si conectamos dispositivo con iOS previo descarga el SDK

4

Page 5: Presentación de PowerPoint - ua · • Adobe Flash CS5.5 3. ... • Edición del código fuente, interfaz y fichero de configuración. ... Fases de la construcción • Indica para

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Plataforma iOS © 2011-2012 Depto. Ciencia de la Computación e IA Xcode y Objective-C

Nuevo proyecto• File > New > New Project ...

5

Page 6: Presentación de PowerPoint - ua · • Adobe Flash CS5.5 3. ... • Edición del código fuente, interfaz y fichero de configuración. ... Fases de la construcción • Indica para

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Plataforma iOS © 2011-2012 Depto. Ciencia de la Computación e IA Xcode y Objective-C

Datos del proyecto

6

Page 7: Presentación de PowerPoint - ua · • Adobe Flash CS5.5 3. ... • Edición del código fuente, interfaz y fichero de configuración. ... Fases de la construcción • Indica para

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Plataforma iOS © 2011-2012 Depto. Ciencia de la Computación e IA Xcode y Objective-C

Identificador del paquete• Cada aplicación se identifica por su bundle identifier

es.ua.jtech.EspecialistaMoviles

• Se compone de• Company identifier

Se suele utilizar nuestra URL al revés: es.ua.jtech• Product name

Nombre de nuestra aplicación: EspecialistaMoviles

• En Objective-C no hay paquetes• Como espacio de nombres se utiliza un prefijo• Prefijo común para las clases de una aplicación / librería: UA

7

Page 8: Presentación de PowerPoint - ua · • Adobe Flash CS5.5 3. ... • Edición del código fuente, interfaz y fichero de configuración. ... Fases de la construcción • Indica para

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Plataforma iOS © 2011-2012 Depto. Ciencia de la Computación e IA Xcode y Objective-C

Ventana de Xcode

8

Page 9: Presentación de PowerPoint - ua · • Adobe Flash CS5.5 3. ... • Edición del código fuente, interfaz y fichero de configuración. ... Fases de la construcción • Indica para

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Plataforma iOS © 2011-2012 Depto. Ciencia de la Computación e IA Xcode y Objective-C

Elementos de la ventana de Xcode

• Navegador (parte izquierda)• Elementos del proyecto, búsqueda, lista de errores de compilación

• Editor (parte central)• Edición del código fuente, interfaz y fichero de configuración.

• Barra de botones (parte superior)• Ejecución de la aplicación (izquierda)• Mostrar/ocultar elementos de la interfaz (derecha)

• Utilidades (parte derecha)• Ayuda rápida y propiedades de los elementos seleccionados

• Depuración (parte inferior)• Consola de logs

9

Page 10: Presentación de PowerPoint - ua · • Adobe Flash CS5.5 3. ... • Edición del código fuente, interfaz y fichero de configuración. ... Fases de la construcción • Indica para

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Plataforma iOS © 2011-2012 Depto. Ciencia de la Computación e IA Xcode y Objective-C

Elementos del proyecto• Fuentes• Fuente Objective-C (.m)• Fichero de cabecera (.h)• Objetos de la interfaz (.xib)

• Recursos y configuración• Ficheros de propiedades (.plist)• Ficheros de cadenas (.strings)

• Frameworks• Librerías utilizadas por el proyecto

• Productos• Resultado de construir la aplicación

10

Page 11: Presentación de PowerPoint - ua · • Adobe Flash CS5.5 3. ... • Edición del código fuente, interfaz y fichero de configuración. ... Fases de la construcción • Indica para

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Plataforma iOS © 2011-2012 Depto. Ciencia de la Computación e IA Xcode y Objective-C

Proyecto y targets

• Un proyecto puede contener varios targets

• Un target especifica cómo construir la aplicación• Versión iPhone• Versión iPad• Pruebas de unidad

• Se puede introducir configuración general para el proyecto, o particular para un target determinado

11

Page 12: Presentación de PowerPoint - ua · • Adobe Flash CS5.5 3. ... • Edición del código fuente, interfaz y fichero de configuración. ... Fases de la construcción • Indica para

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Plataforma iOS © 2011-2012 Depto. Ciencia de la Computación e IA Xcode y Objective-C

Configuración general del target

12

Page 13: Presentación de PowerPoint - ua · • Adobe Flash CS5.5 3. ... • Edición del código fuente, interfaz y fichero de configuración. ... Fases de la construcción • Indica para

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Plataforma iOS © 2011-2012 Depto. Ciencia de la Computación e IA Xcode y Objective-C

Fichero Info.plist• Configuración de la aplicación• Nombre a mostrar, identificador, icono, dispositivos soportados, ...

13

Page 14: Presentación de PowerPoint - ua · • Adobe Flash CS5.5 3. ... • Edición del código fuente, interfaz y fichero de configuración. ... Fases de la construcción • Indica para

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Plataforma iOS © 2011-2012 Depto. Ciencia de la Computación e IA Xcode y Objective-C

Configuración de la construcción

14

Page 15: Presentación de PowerPoint - ua · • Adobe Flash CS5.5 3. ... • Edición del código fuente, interfaz y fichero de configuración. ... Fases de la construcción • Indica para

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Plataforma iOS © 2011-2012 Depto. Ciencia de la Computación e IA Xcode y Objective-C

Fases de la construcción• Indica para un target qué recursos se deben compilar, cuáles se

deben incluir en el paquete, y qué librerías se deben referenciar

15

Page 16: Presentación de PowerPoint - ua · • Adobe Flash CS5.5 3. ... • Edición del código fuente, interfaz y fichero de configuración. ... Fases de la construcción • Indica para

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Plataforma iOS © 2011-2012 Depto. Ciencia de la Computación e IA Xcode y Objective-C

Configuraciones del proyecto• Nos permiten especificar diferentes conjuntos de parámetros de

construcción. • Por defecto se crean Debug y Release

16

Page 17: Presentación de PowerPoint - ua · • Adobe Flash CS5.5 3. ... • Edición del código fuente, interfaz y fichero de configuración. ... Fases de la construcción • Indica para

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Plataforma iOS © 2011-2012 Depto. Ciencia de la Computación e IA Xcode y Objective-C

Esquemas

• Vinculan targets a configuraciones para cada posible acción

• Acciones:• Build: Sólo construye la aplicación• Run: Construye y ejecuta la aplicación (Debug)• Test: Ejecuta las pruebas de unidad (Debug)• Profile: Análisis dinámico de la aplicación (Release)• Analyze: Análisis estático del código (Debug)• Archive: Genera el producto (Release)

17

Page 18: Presentación de PowerPoint - ua · • Adobe Flash CS5.5 3. ... • Edición del código fuente, interfaz y fichero de configuración. ... Fases de la construcción • Indica para

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Plataforma iOS © 2011-2012 Depto. Ciencia de la Computación e IA Xcode y Objective-C

Configuración de esquemas• Podemos cambiar el target y la configuración asociados a cada

acción en el esquema actual, o crear nuevos esquemas

18

Page 19: Presentación de PowerPoint - ua · • Adobe Flash CS5.5 3. ... • Edición del código fuente, interfaz y fichero de configuración. ... Fases de la construcción • Indica para

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Plataforma iOS © 2011-2012 Depto. Ciencia de la Computación e IA Xcode y Objective-C

Ejecución de la aplicación

• Podemos ejecutar la aplicación mediante la acción Run

• Se puede ejecutar en• Simulador• Dispositivo real

• Para ejecutar en dispositivo real necesitamos certificado de desarrollador

19

Page 20: Presentación de PowerPoint - ua · • Adobe Flash CS5.5 3. ... • Edición del código fuente, interfaz y fichero de configuración. ... Fases de la construcción • Indica para

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Plataforma iOS © 2011-2012 Depto. Ciencia de la Computación e IA Xcode y Objective-C

Añadir recursos• Add Files To ...• Añade recursos que

se empaquetarán con la aplicación

20

Copia los recursos al directorio del proyecto (si no están ya ahí)

Permite convertir la estructura de directorios añadida a grupos o carpetas

Page 21: Presentación de PowerPoint - ua · • Adobe Flash CS5.5 3. ... • Edición del código fuente, interfaz y fichero de configuración. ... Fases de la construcción • Indica para

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Plataforma iOS © 2011-2012 Depto. Ciencia de la Computación e IA Xcode y Objective-C

Grupos y carpetas• Los grupos sólo se muestran en el entorno• Aparecen como carpetas amarillas• No se corresponde con la estructura del disco• Se empaquetan todos en el raíz del bundle

• Las carpetas se empaquetan como tales en el bundle• Aparecen como carpetas azules

21

Page 22: Presentación de PowerPoint - ua · • Adobe Flash CS5.5 3. ... • Edición del código fuente, interfaz y fichero de configuración. ... Fases de la construcción • Indica para

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Plataforma iOS © 2011-2012 Depto. Ciencia de la Computación e IA Xcode y Objective-C

Obtención de ayuda• Utilidades• Ayuda rápida• Elemento bajo

el cursor

• Organizer• Documentación

• Atajo• Alt+click sobre

el código• Abre cuadro de

ayuda

22

Page 23: Presentación de PowerPoint - ua · • Adobe Flash CS5.5 3. ... • Edición del código fuente, interfaz y fichero de configuración. ... Fases de la construcción • Indica para

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Plataforma iOS © 2011-2012 Depto. Ciencia de la Computación e IA Xcode y Objective-C

Objective-C• Extensión del lenguaje C orientada a objetos• Ficheros con extensión .m en lugar de .c• Utilizaremos la API Cocoa Touch

• Diferente a C++• Se basa en paso de mensajes en lugar de llamadas a métodos

• Podemos utilizar cualquier elemento de C estándar

• Existe la variante Objective-C++• Permite utilizar código C++ dentro de Objective-C• Ficheros con extensión .mm

23

Page 24: Presentación de PowerPoint - ua · • Adobe Flash CS5.5 3. ... • Edición del código fuente, interfaz y fichero de configuración. ... Fases de la construcción • Indica para

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Plataforma iOS © 2011-2012 Depto. Ciencia de la Computación e IA Xcode y Objective-C

Paso de mensajes• En Objective-C se habla de paso de mensajes• Similar a lenguajes como Smalltalk• La dirección a llamar se resuelve en tiempo de ejecución

• Obtener longitud de una cadena

• El método puede no existir en el objeto receptor del mensaje

24

NSString*  cadena  =  @"cadena-­‐de-­‐prueba";int  tam  =  [cadena  length];

NSString*  cadena  =  @"cadena-­‐de-­‐prueba";[cadena  metodoInexistente];  //  Produce  warning,  pero  compila

id  cadena  =  @"cadena-­‐de-­‐prueba";[cadena  metodoInexistente];  //  Solo  da  error  de  ejecucion

Puntero genérico a objeto

Page 25: Presentación de PowerPoint - ua · • Adobe Flash CS5.5 3. ... • Edición del código fuente, interfaz y fichero de configuración. ... Fases de la construcción • Indica para

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Plataforma iOS © 2011-2012 Depto. Ciencia de la Computación e IA Xcode y Objective-C

Cadenas• Las cadenas en Objective-C son objetos de clase NSString• No confundir con las cadenas de C (char *)• Los literales de NSString se crean con el prefijo @

• Crear una cadena con formato

• Impresión de logs

• Aparecen en la consola de depuración

25

NSString  *nombre  =  @"Pepe";int  edad  =  20;  NSString  *cadena  =      [NSString  stringWithFormat:  @"Nombre:  %@  (edad  %d)",  nombre,  edad];

NSString  *cadena  =  @"Cadena";

NSLog(@"i  =  %d,  obj  =  %@",  i,  obj);

Page 26: Presentación de PowerPoint - ua · • Adobe Flash CS5.5 3. ... • Edición del código fuente, interfaz y fichero de configuración. ... Fases de la construcción • Indica para

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Plataforma iOS © 2011-2012 Depto. Ciencia de la Computación e IA Xcode y Objective-C

Localización• Podemos añadir localización de recursos• Para todo el proyecto• Para recursos individuales (panel de utilidades)

• Se crean varias copias del recurso, una para cada idioma• En disco cada fichero está en un directorio

en.lproj, es.lproj. ca.lproj, ...

• Localización de cadenas de configuración

26

//  Versión  en  castellano  del  fichero  InfoPlist.strings"CFBundleDisplayName"  =  "MovilesUA";

//  Versión  en  inglés  del  fichero  InfoPlist.strings  "CFBundleDisplayName"  =  "MobileUA";

Page 27: Presentación de PowerPoint - ua · • Adobe Flash CS5.5 3. ... • Edición del código fuente, interfaz y fichero de configuración. ... Fases de la construcción • Indica para

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Plataforma iOS © 2011-2012 Depto. Ciencia de la Computación e IA Xcode y Objective-C

Localización de cadenas• Por defecto se extraen a un fichero Localizable.strings• Creamos el fichero con New File > iOS > Resource > Strings File

• Formato del fichero

• Acceso a la cadena localizada desde el código

27

"identificador"  =  "cadena  a  mostrar";

"Titulo"  =  "Moviles  UA";

NSString  *cadenaLocalizada  =  NSLocalizedString(@"Titulo",  @"Mobile  UA");

Page 28: Presentación de PowerPoint - ua · • Adobe Flash CS5.5 3. ... • Edición del código fuente, interfaz y fichero de configuración. ... Fases de la construcción • Indica para

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Plataforma iOS © 2011-2012 Depto. Ciencia de la Computación e IA Xcode y Objective-C

Tipos de datos básicos• Contamos con todos los tipos básicos de C• char, short, int, long, float, double, ...

• Cocoa Touch define tipos básicos adicionales• Se adaptan a la arquitectura (32 ó 64 bits)

NSInteger (entero con signo)NSUInteger (entero sin signo)CGFloat (flotante)

• Tipo booleano• Puede tomar como valor las constantes YES o NO

BOOL b = YES;

28

Page 29: Presentación de PowerPoint - ua · • Adobe Flash CS5.5 3. ... • Edición del código fuente, interfaz y fichero de configuración. ... Fases de la construcción • Indica para

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Plataforma iOS © 2011-2012 Depto. Ciencia de la Computación e IA Xcode y Objective-C

Enumeraciones

• Se definen igual que en C• Cada elemento tiene asignado un valor entero (incremental)

• Podemos asignar manualmente los valores

29

typedef  enum  {    UATipoAsignaturaOptativa,    UATipoAsignaturaObligatoria,    UATipoAsignaturaTroncal}  UATipoAsignatura;

typedef  enum  {    UATipoAsignaturaOptativa  =  0,    UATipoAsignaturaObligatoria  =  1,    UATipoAsignaturaTroncal  =  2}  UATipoAsignatura;

Page 30: Presentación de PowerPoint - ua · • Adobe Flash CS5.5 3. ... • Edición del código fuente, interfaz y fichero de configuración. ... Fases de la construcción • Indica para

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Plataforma iOS © 2011-2012 Depto. Ciencia de la Computación e IA Xcode y Objective-C

Estructuras de datos

• También se definen igual que en C

• En Cocoa Touch hay funciones para inicializar y gestionar las estructuras que define

30

struct  CGPoint  {    CGFloat  x;    CGFloat  y;};typedef  struct  CGPoint  CGPoint;

CGPoint  punto  =  CGPointMake(x,y);

Page 31: Presentación de PowerPoint - ua · • Adobe Flash CS5.5 3. ... • Edición del código fuente, interfaz y fichero de configuración. ... Fases de la construcción • Indica para

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Plataforma iOS © 2011-2012 Depto. Ciencia de la Computación e IA Xcode y Objective-C

Directivas• #import• Importa fichero de cabecera .h• A diferencia de #include, evita inclusiones cíclicas

• #define• Define macros de preprocesamiento• Se pueden comprobar los símbolos definidos

• #pragma mark• Permite etiquetar segmentos de código

31

#ifdef  DEBUG    NSLog(@"Texto  del  log");#endif

#pragma  mark  Constructores//  Código  de  los  constructores  #pragma  mark  Eventos  del  ciclo  de  vida//  Código  de  los  manejadores  de  eventos

Page 32: Presentación de PowerPoint - ua · • Adobe Flash CS5.5 3. ... • Edición del código fuente, interfaz y fichero de configuración. ... Fases de la construcción • Indica para

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Plataforma iOS © 2011-2012 Depto. Ciencia de la Computación e IA Xcode y Objective-C

Constantes

• Se definen mediante el modificados const• Afecta al elemento justo a su izquierda

• Es preferible definir las constantes con const en lugar de #define

32

//  Puntero  variable  a  objeto  NSString  constante  (MAL)const  NSString  *  UATitulo  =  @"Menu";    //  Equivalente  al  anterior  (MAL)NSString  const  *  UATitulo  =  @"Menu";    //  Puntero  constante  a  objeto  NSString  (BIEN)NSString  *  const  UATitulo  =  @"Menu";

Page 33: Presentación de PowerPoint - ua · • Adobe Flash CS5.5 3. ... • Edición del código fuente, interfaz y fichero de configuración. ... Fases de la construcción • Indica para

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Plataforma iOS © 2011-2012 Depto. Ciencia de la Computación e IA Xcode y Objective-C

Definición de una clase (.h)

33

@interface  UAAsignatura  :  NSObject  {        NSString  *_nombre;        NSString  *_descripcion;        NSUInteger  _horas;}  +  (CGFloat)creditosParaHoras:(CGFloat)horas;-­‐  (CGFloat)creditos;-­‐  (CGFloat)tasaConPrecioPorCredito:(CGFloat)precioCredito                                                    esBecario:(BOOL)becario;  @end

Variables de instancia (protegidas)

Métodos de clase

Métodos de instancia

Nombre de la clase

Hereda de NSObject

Page 34: Presentación de PowerPoint - ua · • Adobe Flash CS5.5 3. ... • Edición del código fuente, interfaz y fichero de configuración. ... Fases de la construcción • Indica para

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Plataforma iOS © 2011-2012 Depto. Ciencia de la Computación e IA Xcode y Objective-C

Implementación de la clase (.m)

34

#import  "UAAsignatura.h"  const  CGFloat  UAHorasPorCredito  =  10;const  CGFloat  UADescuentoBecario  =  0.5;  @implementation  UAAsignatura  +  (CGFloat)  creditosParaHoras:(CGFloat)horas  {        return  horas  /  UAHorasPorCredito;}  -­‐  (CGFloat)creditos  {        return  [UAAsignatura  creditosParaHoras:  _horas];}  -­‐  (CGFloat)tasaConPrecioPorCredito:(CGFloat)precioCredito  esBecario:(BOOL)becario  {        CGFloat  precio  =  [self  creditos]  *  precioCredito;        if(becario)  {                precio  =  precio  *  UADescuentoBecario;                        }        return  precio;}  @end

Page 35: Presentación de PowerPoint - ua · • Adobe Flash CS5.5 3. ... • Edición del código fuente, interfaz y fichero de configuración. ... Fases de la construcción • Indica para

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Plataforma iOS © 2011-2012 Depto. Ciencia de la Computación e IA Xcode y Objective-C

Vista de asistente

35

Page 36: Presentación de PowerPoint - ua · • Adobe Flash CS5.5 3. ... • Edición del código fuente, interfaz y fichero de configuración. ... Fases de la construcción • Indica para

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Plataforma iOS © 2011-2012 Depto. Ciencia de la Computación e IA Xcode y Objective-C

Creación e inicialización• Reservamos memoria para un objeto con alloc• Inicializamos el objeto con un inicializador init

• Inicialización mediante métodos factoría• Son métodos de clase• No hace falta que reservemos memoria nosotros• Su nombre comienza por el del objeto que van a crear

36

NSString  *cadVacia  =  [[NSString  alloc]  init];NSString  *cadFormato  =  [[NSString  alloc]  initWithFormat:  @"Numero  %d",  5];

NSString  *cadVacia  =  [NSString  string];NSString  *cadFormato  =  [NSString  stringWithFormat:  @"Numero  %d",  5];

Page 37: Presentación de PowerPoint - ua · • Adobe Flash CS5.5 3. ... • Edición del código fuente, interfaz y fichero de configuración. ... Fases de la construcción • Indica para

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Plataforma iOS © 2011-2012 Depto. Ciencia de la Computación e IA Xcode y Objective-C

Implementación de inicializadores

37

-­‐  (id)initWithNombre:(NSString*)nombre                    descripcion:(NSString*)descripcion                                horas:(NSUInteger)horas  {        self  =  [super  init];        if(self  !=  nil)  {                _nombre  =  nombre;                _descripcion  =  descripcion;                _horas  =  horas;        }        return  self;}

Devuelven siempre el tipo id

Inicializa la superclase y asigna el objeto resultante al objeto actual (self)

Si la superclase no ha devuelto un puntero a nulo, inicializa variables de instancia propias

Devuelve el objeto inicializado (self)

Page 38: Presentación de PowerPoint - ua · • Adobe Flash CS5.5 3. ... • Edición del código fuente, interfaz y fichero de configuración. ... Fases de la construcción • Indica para

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Plataforma iOS © 2011-2012 Depto. Ciencia de la Computación e IA Xcode y Objective-C

Inicializador designado• Debe ser invocado por el resto de inicializadores• Suele ser el que lleva un mayor número de parámetros

38

-­‐  (id)init;-­‐  (id)initWithNombre:(NSString*)nombre;-­‐  (id)initWithNombre:(NSString*)nombre                    descripcion:(NSString*)descripcion                                horas:(NSUInteger)horas;

-­‐  (id)init{        return  [self  initWithNombre:  @"Sin  nombre"];}  -­‐  (id)initWithNombre:(NSString  *)nombre{        return  [self  initWithNombre:nombre                                          descripcion:@"Sin  descripcion"                                                    horas:-­‐1];}

Page 39: Presentación de PowerPoint - ua · • Adobe Flash CS5.5 3. ... • Edición del código fuente, interfaz y fichero de configuración. ... Fases de la construcción • Indica para

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Plataforma iOS © 2011-2012 Depto. Ciencia de la Computación e IA Xcode y Objective-C

Gestión de la memoria

• La gestión se hace contando referencias• Cuando se reserva con alloc el número de referencias es 1• Podemos incrementar el número de referencias con retain• Podemos decrementarlo con release• Cuando las referencias llegan a 0, se libera la memoria

• Regla de oro• El objeto que retiene (alloc-retain), debe liberar (release)

39

Page 40: Presentación de PowerPoint - ua · • Adobe Flash CS5.5 3. ... • Edición del código fuente, interfaz y fichero de configuración. ... Fases de la construcción • Indica para

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Plataforma iOS © 2011-2012 Depto. Ciencia de la Computación e IA Xcode y Objective-C

Retención y liberación• En el constructor retenemos variables de instancia

• Al liberarse un objeto, se ejecuta su método dealloc• Liberar variables retenidas por el objeto• Llamar a dealloc en la superclase

40

-­‐  (id)initWithNombre:(NSString*)nombre                    descripcion:(NSString*)descripcion                                horas:(NSUInteger)horas  {        self  =  [super  init];        if(self  !=  nil)  {                _nombre  =  [nombre  retain];                _descripcion  =  [descripcion  retain];                _horas  =  horas;        }        return  self;}

-­‐  (void)dealloc  {        [_nombre  release];        [_descripcion  release];        [super  dealloc];}

Page 41: Presentación de PowerPoint - ua · • Adobe Flash CS5.5 3. ... • Edición del código fuente, interfaz y fichero de configuración. ... Fases de la construcción • Indica para

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Plataforma iOS © 2011-2012 Depto. Ciencia de la Computación e IA Xcode y Objective-C

Gestión en métodos factoría• El propio método debe liberar lo que ha retenido• El objeto debe estar disponible en memoria al menos hasta que lo

recoja quien llamó al método

• Utilizamos autorelease• Guarda la liberación como pendiente en un autorelease pool, que

se llevará a cabo cuando termine la pila de llamadas

41

+  (id)asignaturaWithNombre:(NSString*)nombre                                descripcion:(NSString*)descripcion                                            horas:(NSUInteger)horas  {        return  [[[UAAsignatura  alloc]  initWithNombre:nombre                                                                            descripcion:descripcion                                                                                        horas:horas]  autorelease];}

Page 42: Presentación de PowerPoint - ua · • Adobe Flash CS5.5 3. ... • Edición del código fuente, interfaz y fichero de configuración. ... Fases de la construcción • Indica para

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Plataforma iOS © 2011-2012 Depto. Ciencia de la Computación e IA Xcode y Objective-C

Clase NSObject• Casi todos los objetos heredan de ella en última instancia• Podemos no heredar de nadie para crear una estructura de datos

• Podemos sobrescribir una serie de métodos• isEqual

Comprueba si dos objetos son iguales internamenteDevuelve YES o NO

• descriptionDevuelve la descripción del objeto en forma de cadenaEs lo que se obtiene al imprimir el objeto con %@

• hashCódigo hash para indexar el objetoDebe ser coherente con isEqual

42

Page 43: Presentación de PowerPoint - ua · • Adobe Flash CS5.5 3. ... • Edición del código fuente, interfaz y fichero de configuración. ... Fases de la construcción • Indica para

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Plataforma iOS © 2011-2012 Depto. Ciencia de la Computación e IA Xcode y Objective-C

Copia de objetos• Algunos objetos pueden copiarse con el método copy• Al crear un objeto como copia su contador de referencias es 1

• Objetos mutables e inmutables• Algunos objetos existen en las dos modalidades

NSString y NSMutableString

• Podemos obtener copias mutables de objetos inmutables con mutableCopy

43

NSString  *cadena  =  @"Mi  cadena";  NSString  *copiaInmutable  =  [cadena  copy];    NSMutableString  *copiaMutable  =  [cadena  mutableCopy];

Page 44: Presentación de PowerPoint - ua · • Adobe Flash CS5.5 3. ... • Edición del código fuente, interfaz y fichero de configuración. ... Fases de la construcción • Indica para

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Plataforma iOS © 2011-2012 Depto. Ciencia de la Computación e IA Xcode y Objective-C

Gestión de fechas• Se gestionan mediante la clase NSDate

• Podemos obtener los componentes de una fecha

• O una fecha a partir de sus componentes

44

NSDate  *fecha  =  [NSDate  date];

NSCalendar  *calendario  =  [NSCalendar  currentCalendar];NSDateComponents  *componentes  =  [currentCalendar          components:(NSDayCalendarUnit  |  NSMonthCalendarUnit  |  NSYearCalendarUnit)              fromDate:fecha];              NSInteger  dia  =  [componentes  day];NSInteger  mes  =  [componentes  month];NSInteger  anyo  =  [componentes  year];

NSDateComponents  *componentes  =  [[NSDateComponents  alloc]  init];[componentes  setDay:  dia];[componentes  setMonth:  mes];[componentes  setYear:  anyo];  NSDate  *fecha  =  [calendario  dateFromComponents:  componentes];[componentes  release];

Page 45: Presentación de PowerPoint - ua · • Adobe Flash CS5.5 3. ... • Edición del código fuente, interfaz y fichero de configuración. ... Fases de la construcción • Indica para

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Plataforma iOS © 2011-2012 Depto. Ciencia de la Computación e IA Xcode y Objective-C

Tratamiento de errores• Se pueden utilizar excepciones

• Son siempre unchecked• Para errores de tipo checked suele utilizarse NSError

45

NSError  *error;NSString  *contenido  =  [NSString                              stringWithContentsOfFile:  @"texto.txt"                                                              encoding:  NSASCIIStringEncoding                                                                    error:  &error];NSString  *motivo  =  [error  localizedFailureReason];

@try        //  Codigo  @catch(NSException  *ex)  {        //  Codigo  tratamiento  excepcion}@finally  {        //  Codigo  de  finalización}

Page 46: Presentación de PowerPoint - ua · • Adobe Flash CS5.5 3. ... • Edición del código fuente, interfaz y fichero de configuración. ... Fases de la construcción • Indica para

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Plataforma iOS © 2011-2012 Depto. Ciencia de la Computación e IA Xcode y Objective-C

Ámbito de las variables• Global• Se declaran fuera de cualquier método. Para que se pueda

acceder desde otros ficheros deben aparecer declaradas con extern en algún fichero de cabecera.

• Fichero• Se declaran fuera de cualquier método con modificador static.

Accesible sólo desde el fichero en el que se define.

• Local• Se declaran dentro de un método. Si lleva modificador static

sólo se instancia la primera vez que se ejecuta el método.

46

Page 47: Presentación de PowerPoint - ua · • Adobe Flash CS5.5 3. ... • Edición del código fuente, interfaz y fichero de configuración. ... Fases de la construcción • Indica para

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Plataforma iOS © 2011-2012 Depto. Ciencia de la Computación e IA Xcode y Objective-C

Patrón singleton

• Podemos utilizar variables de tipo static para implementar el patrón singleton

• Normalmente crearemos un método de clase con prefijo shared que nos dará acceso a la instacia única

47

+  (UADatosCompartidos)  sharedDatosCompartidos  {        static  DatosCompartidos  *datos  =  nil;        if(nil  ==  datos)  {                datos  =  [[DatosCompartidos  alloc]  init];        }        return  datos;}

Page 48: Presentación de PowerPoint - ua · • Adobe Flash CS5.5 3. ... • Edición del código fuente, interfaz y fichero de configuración. ... Fases de la construcción • Indica para

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Plataforma iOS © 2011-2012 Depto. Ciencia de la Computación e IA Xcode y Objective-C

¿Preguntas...?

48