MOBILE APPS
CON OBJECTIVE-C
DAY 01
12/NOVEMBRE/2011
alberto pasca | apasca@cutaway.itwww.cutaway.it
contents | day 01
 origini
 Xcode, Interface Builder, Instruments
 framework base
 sintassi
 gestione memoria
 esempi pratici
Mobile Apps con Objective-c | alberto pasca
slide 1/2810
origini
Mobile Apps con Objective-c | alberto pasca
origini
Mobile Apps con Objective-c | alberto pasca
SmallTalk + C = OOPC + frameworks = Objective-C
?GCC
ObjC
OOPC
origini - devices
Mobile Apps con Objective-c | alberto pasca
Display: 320x480
Accelerometro
Prossimità
Gps / Wifi
Bluetooth
Ram
128Mb -> 512Mb
CPU
412Mhz -> 2x800Mhz
Retina display
640x960
Display: 768x1024
Accelerometro
Prossimità
Gps / Wifi
Bluetooth
Ram
256Mb -> 512Mb
CPU
1Ghz -> 2x880Mhz
iPod - iPhone 3G / 3GS / 4 / 4S - iPad / iPad2
xcode
Mobile Apps con Objective-c | alberto pasca
Cosa vedremo…
• xcode
• configurazione
• target
• file.plist
• alberatura progetto
• interface builder
• la window
• le view
• i componenti
• IBAction
• IBOutlet
• frameworks
Lezione_00_Xcode
xcode – code
Mobile Apps con Objective-c | alberto pasca
frameworks
Mobile Apps con Objective-c | alberto pasca
Principali:
prefix
 Foundation (NS)
 UIKit (UI)
 QuartzCore (CA)
 CoreGraphics (CG)
 CoreLocation (CL)
frameworks – intro
Mobile Apps con Objective-c | alberto pasca
Librerie software che aumentano le funzionalità di una classe
http://tinyurl.com/objc-prefix
Foundation
NSObject
NSString
NSNumber
NSArray
NSDictionar
y
NSUrl
NSTimer
NSNotificati
on
NSException
[…]
frameworks
Mobile Apps con Objective-c | alberto pasca
UIKit
UIView
UIWindow
UIButton
UILabel
UITableView
UITextField
UISlider
UIWebView
UIDevice
UIEvent
[…]
CoreGraphics
CGColor
CGContext
CGFont
CGGradient
CGImage
CGLayer
CGPDFPage
[…]
frameworks
Mobile Apps con Objective-c | alberto pasca
CoreLocation
CLGeocoder
CLHeading
CLLocation
CLLocationManager
CLPlacemark
CLRegion
[…]
QuartzCore
CAAnimation
CABasicAnimation
CALayer
CAScrollLayer
CATiledLayer
CATransition
[…]
sintassi
Mobile Apps con Objective-c | alberto pasca
sintassi – variabili
#define Moltiplica(x,y) (x*y)
const int valore = 28;
int val = 0;
double val = .5;
float val = 10.;
char val = 'a';
BOOL val = YES | NO;
NSString *val = @"stringa";
id val = MyClass | MyObject;
SEL selector = @selector(MyMethod);
Mobile Apps con Objective-c | alberto pasca
Dynamic Typing
Tipi base
> ereditati dal C
Tipi speciali
> ereditati da SmallTalk
ed aggiunti in ObjC
Ogni oggetto va dicharato
come un puntatore!
sintassi – operatori
Mobile Apps con Objective-c | alberto pasca
Aritmetici
+ - * / %
Assegnamento
+= -= *= /= %=
++ --
Comparazione
== != > < >= <=
Bit
<<= >>= &= |= ^=
Ternari
[condition] ? [true] : [false]
myvar =
x == y ? y <= z ?
y : x != j ? k
>= j ? k : j : x :
"omg_i_did_again”;
sintassi – logging
Mobile Apps con Objective-c | alberto pasca
NSLog(@”Log string!”);
Formati:
 %@ -> descrizione oggetto
 %d - %u -> int / uint
 %f - %e -> float / exp
 %c - %C-> char 8b / char 16b
 %s - %S -> null-terminated char 8/16
 %p -> pointer 0x
 %x - %X -> hex lowercase/uppercase
NSLog(@”tricks: %s - %d - %s",
__FUNCTION__, __LINE__, __FILE__);
sintassi – cicli e condizioni
for ( int i=0; i<28; i++ ) {
NSLog(@"I: %d", i);
}
int i=28;
while ( i != 0 ) {
NSLog(@"I: %d", --i);
}
int i=28;
do {
NSLog(@"I: %d", i--);
} while ( i!=0 );
Mobile Apps con Objective-c | alberto pasca
if ( i==28 ){
NSLog(@"28!!!");
} else {
NSLog(@"I: %d", i);
}
switch ( i ) {
case 1:
NSLog(@"UNO");
break;
case 2:
NSLog(@"DUE");
break;
default: break;
}
FOR
WHILE
DO-WHILE
IF - ELSE
SWITCH
sintassi – enumerazioni
aClass *class = [[aClass alloc] init];
NSArray *arr = [NSArray arrayWithObjects:class, class, class, nil];
int tot = [arr count];
for ( int i=0; i<=tot; i++ )
NSLog(@"STR: %@", [arr objectAtIndex:i]);
for (aClass *c in arr)
NSLog(@"STR: %@", [c description]);
NSEnumerator *en = [arr objectEnumerator];
while (class == [en nextObject] )
[class doWork];
Mobile Apps con Objective-c | alberto pasca
CLASSICO
FOREACH
ENUM
sintassi - metodi
Senza parametri:
C -> oggetto.Metodo();
OBJC -> [oggetto Metodo];
Con parametri:
C -> oggetto.Metodo(5, "pippo");
OBJC -> [oggetto MetodoConNumero:5 andStringa:@"pippo"];
Non si chiama un metodo ma si invia un messaggio!
Mobile Apps con Objective-c | alberto pasca
- (void) Metodo;
- (void) MetodoConNumero:(int)num andStringa:(NSString*)str;
sintassi – classi (gerarchia)
NSObject
NSArray NSString UIResponder
UIView
UIControl
UITextField UISlider
UILabel
CLASSE
Descrizione astratta che
definisce il comportamento di un
oggetto.
OGGETTO
È un entità appartenente alla
classe, con un proprio stato e
comportamento.
Mobile Apps con Objective-c | alberto pasca
sintassi – classi (interface)
#import "aSuperClass.h”
#import <aSuperClass.h>
#include "aSuperClass.h”
#include <aSuperClass.h>
@class aSuperClass;
@interface MyClass: aSuperClass {
int pippo;
}
-/+ (void) mioMetodo;
@end
.H Dichiarazione di variabili e prototipi dei metodi
Mobile Apps con Objective-c | alberto pasca
inclusione lib/classi
Variabili
Metodi
sintassi – classi (implementation)
#import "MyClass.h"
@implementation MyClass
- (void) mioMetodoIstanza {
// implementazione
}
+ (void) mioMetodoDiClasse {
// implementazione
}
@end
Mobile Apps con Objective-c | alberto pasca
.M Implementazione metodi
Fine implementazione
Inizio implementazione
Implementazione metodi
sintassi – proprietà
nonatomic
+
readonly vs readwrite
+
retain vs assign vs copy
Mobile Apps con Objective-c | alberto pasca
Creano i Getters / Setters per una variabile
tramite le keywords @property (file .H) e @syntetize/@dynamic (file .M)
mutually
exclusive
sintassi – proprietà
Mobile Apps con Objective-c | alberto pasca
oggetto0x01retain
assign
oggetto0x02copy
0x01
+1
+0
+1
@property (nonatomic, assign) int CurrentGameLevel;
sintassi – proprietà
Mobile Apps con Objective-c | alberto pasca
- (void) setVal:(NSString*)v { variabile = v; }
- (void) setVal:(NSString*)v {
if ( v != variabile ) {
[variabile release];
variabile = [v copy];
}
}
- (void) setVal:(NSString*)v {
if ( v != variabile ) {
[variabile release];
variabile = [v retain];
}
}
assign
copy
retain
sintassi – oggetti
Creazione oggetti:
Auto car = new Auto();
Auto *car = [[Auto alloc] init];
Rilascio oggetti:
if (car != nil) [car release];
Mobile Apps con Objective-c | alberto pasca
Invece di invocare dei metodi, si chiede all’oggetto in questione di fare qualcosa..
alloc + init è il pattern di
defaul per creare un oggetto!
sintassi – forwarding
 Invio di messaggi ad oggetti non specificati
nell’interfaccia o addirittura non esistenti !
id delegate;
isKindOfClass - respondsToSelector
- (void) sendMessage {
if ([delegate isKindOfClass:[MyClass class]])
if ([delegate respondsToSelector:@selector(method)])
[delegate method];
- }
Mobile Apps con Objective-c | alberto pasca
sintassi – protocolli
 Callback
 Ereditarietà multipla
 Il metodo chiamato potrebbe non esistere!
 Protocolli formali / informali, o meglio…
@required e @optional
@protocol ClassDelegate
- (void) HoFinitoFaiQualcosa;
@end
Mobile Apps con Objective-c | alberto pasca
Scambiano messaggi tra le classi o le interfaccie stesse
sintassi – categorie
#import <Foundation/Foundation.h>
@interface NSString (HtmlStrings)
- (BOOL) isUrl;
@end
#import "NSString+Html.h"
@implementation NSString (HtmlStrings)
- (BOOL) isUrl {
if ( [self hasPrefix:@"http://"] )
return YES;
return NO;
}
@end
Mobile Apps con Objective-c | alberto pasca
Permettono di aggiungere funzionalità ad oggetti esistenti e compilati
Utilizzo:
#import “NSString+Html.h”
NSString *Str =
@"http://www.cutaway.it";
if ( [Str isUrl] ) return YES;
La classe NSString ha un
nuovo metodo!
sintassi – code
Mobile Apps con Objective-c | alberto pasca
Cosa vedremo…
• main
• application delegate
• view controller
• variabili
• cicli
• enumerazioni
• classi
• metodi (pubblici / privati)
• protocolli
• categorie
• properties
• debug
• log informations
Lezione_01_Sintassi
gestione della memoria
Mobile Apps con Objective-c | alberto pasca
memoria – alloc / release
Mobile Apps con Objective-c | alberto pasca
 Basata sui REFERENCE COUNT
 Oggetti creati con pattern ALLOC INIT hanno RETAIN COUNT +1
 Ogni oggetto rilasciato con RELEASE ha un RC di -1
 Quando RC è 0 viene chiamato il distruttore (dealloc)
memoria – oggetti in autorelease
Mobile Apps con Objective-c | alberto pasca
NSMutableArray *arr1 = [[NSMutableArray alloc] init];
// do somethings
[arr1 release];
NSMutableArray *arr2 = [[[NSMutableArray alloc] init] autorelease];
NSMutableArray *arr3 = [NSMutableArray array];
NSMutableArray *arr4 =
[NSMutableArray arrayWithObjects:@"a", @"b", nil];
NSMutableArray *arr5 =
[NSMutableArray alloc] initWithObjects:@"a", @"b", nil];
1
2
3
4
5
memoria - leaks
Mobile Apps con Objective-c | alberto pasca
- (void) leakyMethod {
// This is a leak
NSArray *array = [[NSArray alloc] init];
}
• MEMORY LEAK
• CLANG_STATIC_ANALYZER
• INSTRUMENTS
memoria - autorelease
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[...]
[pool drain];
[pool release]; // ci pensa il drain a fare il release in ambienti RC!
 Il pool invia automaticamente un RELEASE a tutti gli oggetti del
pool, pertanto la responsabilità di release passa al POOL.
 Command-Line App
 Cicli con molti oggetti temporanei
 Thread
Mobile Apps con Objective-c | alberto pasca
AUTORELEASE POOL
memoria – zombie
NSZombieEnabled = YES;
Mobile Apps con Objective-c | alberto pasca
1 - EXC_BAD_ACCESS
NSString *myString;
- (void)viewDidLoad {
myString = [NSString stringWithFormat:@”asd"];
NSLog(@"%@", myString); // OK
}
- (void) aMethod {
NSLog(@"%@", myString); // EXC_BAD_ACCESS
}
2 – [myString] message sent to deallocated instance 0x5633b0
Cosa vedremo…
• alloc + init
• release
• retain count
• memory leak
• autorelease
• autorelease pool
• runtime error
• EXC_BAD_ACCESS
• NSZombie
• Instruments
• debug
Lezione_02_Memoria
memoria – code
Mobile Apps con Objective-c | alberto pasca
# EOF - day 01
Coming next:
• Interfacce grafiche
• Eventi
• Foundation.framework
• Persistenza dati
• Librerie di sistema
• Librerie esterne
tks
Mobile Apps con Objective-c | alberto pasca

Mobile APPs con Objective-C (iOS 3.1+) - Day 01/02

  • 1.
    MOBILE APPS CON OBJECTIVE-C DAY01 12/NOVEMBRE/2011 alberto pasca | apasca@cutaway.itwww.cutaway.it
  • 2.
    contents | day01  origini  Xcode, Interface Builder, Instruments  framework base  sintassi  gestione memoria  esempi pratici Mobile Apps con Objective-c | alberto pasca slide 1/2810
  • 3.
    origini Mobile Apps conObjective-c | alberto pasca
  • 4.
    origini Mobile Apps conObjective-c | alberto pasca SmallTalk + C = OOPC + frameworks = Objective-C ?GCC ObjC OOPC
  • 5.
    origini - devices MobileApps con Objective-c | alberto pasca Display: 320x480 Accelerometro Prossimità Gps / Wifi Bluetooth Ram 128Mb -> 512Mb CPU 412Mhz -> 2x800Mhz Retina display 640x960 Display: 768x1024 Accelerometro Prossimità Gps / Wifi Bluetooth Ram 256Mb -> 512Mb CPU 1Ghz -> 2x880Mhz iPod - iPhone 3G / 3GS / 4 / 4S - iPad / iPad2
  • 6.
    xcode Mobile Apps conObjective-c | alberto pasca
  • 7.
    Cosa vedremo… • xcode •configurazione • target • file.plist • alberatura progetto • interface builder • la window • le view • i componenti • IBAction • IBOutlet • frameworks Lezione_00_Xcode xcode – code Mobile Apps con Objective-c | alberto pasca
  • 8.
    frameworks Mobile Apps conObjective-c | alberto pasca
  • 9.
    Principali: prefix  Foundation (NS) UIKit (UI)  QuartzCore (CA)  CoreGraphics (CG)  CoreLocation (CL) frameworks – intro Mobile Apps con Objective-c | alberto pasca Librerie software che aumentano le funzionalità di una classe http://tinyurl.com/objc-prefix
  • 10.
    Foundation NSObject NSString NSNumber NSArray NSDictionar y NSUrl NSTimer NSNotificati on NSException […] frameworks Mobile Apps conObjective-c | alberto pasca UIKit UIView UIWindow UIButton UILabel UITableView UITextField UISlider UIWebView UIDevice UIEvent […] CoreGraphics CGColor CGContext CGFont CGGradient CGImage CGLayer CGPDFPage […]
  • 11.
    frameworks Mobile Apps conObjective-c | alberto pasca CoreLocation CLGeocoder CLHeading CLLocation CLLocationManager CLPlacemark CLRegion […] QuartzCore CAAnimation CABasicAnimation CALayer CAScrollLayer CATiledLayer CATransition […]
  • 12.
    sintassi Mobile Apps conObjective-c | alberto pasca
  • 13.
    sintassi – variabili #defineMoltiplica(x,y) (x*y) const int valore = 28; int val = 0; double val = .5; float val = 10.; char val = 'a'; BOOL val = YES | NO; NSString *val = @"stringa"; id val = MyClass | MyObject; SEL selector = @selector(MyMethod); Mobile Apps con Objective-c | alberto pasca Dynamic Typing Tipi base > ereditati dal C Tipi speciali > ereditati da SmallTalk ed aggiunti in ObjC Ogni oggetto va dicharato come un puntatore!
  • 14.
    sintassi – operatori MobileApps con Objective-c | alberto pasca Aritmetici + - * / % Assegnamento += -= *= /= %= ++ -- Comparazione == != > < >= <= Bit <<= >>= &= |= ^= Ternari [condition] ? [true] : [false] myvar = x == y ? y <= z ? y : x != j ? k >= j ? k : j : x : "omg_i_did_again”;
  • 15.
    sintassi – logging MobileApps con Objective-c | alberto pasca NSLog(@”Log string!”); Formati:  %@ -> descrizione oggetto  %d - %u -> int / uint  %f - %e -> float / exp  %c - %C-> char 8b / char 16b  %s - %S -> null-terminated char 8/16  %p -> pointer 0x  %x - %X -> hex lowercase/uppercase NSLog(@”tricks: %s - %d - %s", __FUNCTION__, __LINE__, __FILE__);
  • 16.
    sintassi – ciclie condizioni for ( int i=0; i<28; i++ ) { NSLog(@"I: %d", i); } int i=28; while ( i != 0 ) { NSLog(@"I: %d", --i); } int i=28; do { NSLog(@"I: %d", i--); } while ( i!=0 ); Mobile Apps con Objective-c | alberto pasca if ( i==28 ){ NSLog(@"28!!!"); } else { NSLog(@"I: %d", i); } switch ( i ) { case 1: NSLog(@"UNO"); break; case 2: NSLog(@"DUE"); break; default: break; } FOR WHILE DO-WHILE IF - ELSE SWITCH
  • 17.
    sintassi – enumerazioni aClass*class = [[aClass alloc] init]; NSArray *arr = [NSArray arrayWithObjects:class, class, class, nil]; int tot = [arr count]; for ( int i=0; i<=tot; i++ ) NSLog(@"STR: %@", [arr objectAtIndex:i]); for (aClass *c in arr) NSLog(@"STR: %@", [c description]); NSEnumerator *en = [arr objectEnumerator]; while (class == [en nextObject] ) [class doWork]; Mobile Apps con Objective-c | alberto pasca CLASSICO FOREACH ENUM
  • 18.
    sintassi - metodi Senzaparametri: C -> oggetto.Metodo(); OBJC -> [oggetto Metodo]; Con parametri: C -> oggetto.Metodo(5, "pippo"); OBJC -> [oggetto MetodoConNumero:5 andStringa:@"pippo"]; Non si chiama un metodo ma si invia un messaggio! Mobile Apps con Objective-c | alberto pasca - (void) Metodo; - (void) MetodoConNumero:(int)num andStringa:(NSString*)str;
  • 19.
    sintassi – classi(gerarchia) NSObject NSArray NSString UIResponder UIView UIControl UITextField UISlider UILabel CLASSE Descrizione astratta che definisce il comportamento di un oggetto. OGGETTO È un entità appartenente alla classe, con un proprio stato e comportamento. Mobile Apps con Objective-c | alberto pasca
  • 20.
    sintassi – classi(interface) #import "aSuperClass.h” #import <aSuperClass.h> #include "aSuperClass.h” #include <aSuperClass.h> @class aSuperClass; @interface MyClass: aSuperClass { int pippo; } -/+ (void) mioMetodo; @end .H Dichiarazione di variabili e prototipi dei metodi Mobile Apps con Objective-c | alberto pasca inclusione lib/classi Variabili Metodi
  • 21.
    sintassi – classi(implementation) #import "MyClass.h" @implementation MyClass - (void) mioMetodoIstanza { // implementazione } + (void) mioMetodoDiClasse { // implementazione } @end Mobile Apps con Objective-c | alberto pasca .M Implementazione metodi Fine implementazione Inizio implementazione Implementazione metodi
  • 22.
    sintassi – proprietà nonatomic + readonlyvs readwrite + retain vs assign vs copy Mobile Apps con Objective-c | alberto pasca Creano i Getters / Setters per una variabile tramite le keywords @property (file .H) e @syntetize/@dynamic (file .M) mutually exclusive
  • 23.
    sintassi – proprietà MobileApps con Objective-c | alberto pasca oggetto0x01retain assign oggetto0x02copy 0x01 +1 +0 +1 @property (nonatomic, assign) int CurrentGameLevel;
  • 24.
    sintassi – proprietà MobileApps con Objective-c | alberto pasca - (void) setVal:(NSString*)v { variabile = v; } - (void) setVal:(NSString*)v { if ( v != variabile ) { [variabile release]; variabile = [v copy]; } } - (void) setVal:(NSString*)v { if ( v != variabile ) { [variabile release]; variabile = [v retain]; } } assign copy retain
  • 25.
    sintassi – oggetti Creazioneoggetti: Auto car = new Auto(); Auto *car = [[Auto alloc] init]; Rilascio oggetti: if (car != nil) [car release]; Mobile Apps con Objective-c | alberto pasca Invece di invocare dei metodi, si chiede all’oggetto in questione di fare qualcosa.. alloc + init è il pattern di defaul per creare un oggetto!
  • 26.
    sintassi – forwarding Invio di messaggi ad oggetti non specificati nell’interfaccia o addirittura non esistenti ! id delegate; isKindOfClass - respondsToSelector - (void) sendMessage { if ([delegate isKindOfClass:[MyClass class]]) if ([delegate respondsToSelector:@selector(method)]) [delegate method]; - } Mobile Apps con Objective-c | alberto pasca
  • 27.
    sintassi – protocolli Callback  Ereditarietà multipla  Il metodo chiamato potrebbe non esistere!  Protocolli formali / informali, o meglio… @required e @optional @protocol ClassDelegate - (void) HoFinitoFaiQualcosa; @end Mobile Apps con Objective-c | alberto pasca Scambiano messaggi tra le classi o le interfaccie stesse
  • 28.
    sintassi – categorie #import<Foundation/Foundation.h> @interface NSString (HtmlStrings) - (BOOL) isUrl; @end #import "NSString+Html.h" @implementation NSString (HtmlStrings) - (BOOL) isUrl { if ( [self hasPrefix:@"http://"] ) return YES; return NO; } @end Mobile Apps con Objective-c | alberto pasca Permettono di aggiungere funzionalità ad oggetti esistenti e compilati Utilizzo: #import “NSString+Html.h” NSString *Str = @"http://www.cutaway.it"; if ( [Str isUrl] ) return YES; La classe NSString ha un nuovo metodo!
  • 29.
    sintassi – code MobileApps con Objective-c | alberto pasca Cosa vedremo… • main • application delegate • view controller • variabili • cicli • enumerazioni • classi • metodi (pubblici / privati) • protocolli • categorie • properties • debug • log informations Lezione_01_Sintassi
  • 30.
    gestione della memoria MobileApps con Objective-c | alberto pasca
  • 31.
    memoria – alloc/ release Mobile Apps con Objective-c | alberto pasca  Basata sui REFERENCE COUNT  Oggetti creati con pattern ALLOC INIT hanno RETAIN COUNT +1  Ogni oggetto rilasciato con RELEASE ha un RC di -1  Quando RC è 0 viene chiamato il distruttore (dealloc)
  • 32.
    memoria – oggettiin autorelease Mobile Apps con Objective-c | alberto pasca NSMutableArray *arr1 = [[NSMutableArray alloc] init]; // do somethings [arr1 release]; NSMutableArray *arr2 = [[[NSMutableArray alloc] init] autorelease]; NSMutableArray *arr3 = [NSMutableArray array]; NSMutableArray *arr4 = [NSMutableArray arrayWithObjects:@"a", @"b", nil]; NSMutableArray *arr5 = [NSMutableArray alloc] initWithObjects:@"a", @"b", nil]; 1 2 3 4 5
  • 33.
    memoria - leaks MobileApps con Objective-c | alberto pasca - (void) leakyMethod { // This is a leak NSArray *array = [[NSArray alloc] init]; } • MEMORY LEAK • CLANG_STATIC_ANALYZER • INSTRUMENTS
  • 34.
    memoria - autorelease NSAutoreleasePool*pool = [[NSAutoreleasePool alloc] init]; [...] [pool drain]; [pool release]; // ci pensa il drain a fare il release in ambienti RC!  Il pool invia automaticamente un RELEASE a tutti gli oggetti del pool, pertanto la responsabilità di release passa al POOL.  Command-Line App  Cicli con molti oggetti temporanei  Thread Mobile Apps con Objective-c | alberto pasca AUTORELEASE POOL
  • 35.
    memoria – zombie NSZombieEnabled= YES; Mobile Apps con Objective-c | alberto pasca 1 - EXC_BAD_ACCESS NSString *myString; - (void)viewDidLoad { myString = [NSString stringWithFormat:@”asd"]; NSLog(@"%@", myString); // OK } - (void) aMethod { NSLog(@"%@", myString); // EXC_BAD_ACCESS } 2 – [myString] message sent to deallocated instance 0x5633b0
  • 36.
    Cosa vedremo… • alloc+ init • release • retain count • memory leak • autorelease • autorelease pool • runtime error • EXC_BAD_ACCESS • NSZombie • Instruments • debug Lezione_02_Memoria memoria – code Mobile Apps con Objective-c | alberto pasca
  • 37.
    # EOF -day 01 Coming next: • Interfacce grafiche • Eventi • Foundation.framework • Persistenza dati • Librerie di sistema • Librerie esterne tks Mobile Apps con Objective-c | alberto pasca