iOS 5 & Xcode 4: ARC, Stroryboards

Preview:

DESCRIPTION

Describe new things in iOS 5 and Xcode 4

Citation preview

iOS5����������� ������������������  &����������� ������������������  Xcode42012.1.18����������� ������������������  EungShik����������� ������������������  Kim

WHAT’S����������� ������������������  NEW����������� ������������������  IN����������� ������������������  IOS5

ToolsXcodeInstruments

Tools LanguageXcode Objective-CInstruments

Tools Language

Frameworks

Xcode Objective-CInstruments

FoundationUIKit

Core DataCore Location

(etc)

Tools Language

Frameworks Patterns

Xcode Objective-CInstruments

FoundationUIKit

Core DataCore Location

(etc)

MVCDelegationTarget-Action

iOS����������� ������������������  Development����������� ������������������  Process����������� ������������������  testing����������� ������������������  /����������� ������������������  debugging����������� ������������������  /����������� ������������������  provisioning����������� ������������������  /����������� ������������������  app����������� ������������������  submission

Tools Language

Frameworks Patterns

Xcode Objective-CInstruments

FoundationUIKit

Core DataCore Location

(etc)

MVCDelegationTarget-Action

iOS����������� ������������������  Development����������� ������������������  Process

Tools Language

Frameworks Patterns

iOS����������� ������������������  Development����������� ������������������  Process

Tools Language

Frameworks Patterns

Xcode 4.2

ARC SupportLLVM 3.0 Compiler

Storyboarding

iOS����������� ������������������  Development����������� ������������������  Process

Tools Language

Frameworks Patterns

Enhancements for ARC

iOS����������� ������������������  Development����������� ������������������  Process

Tools Language

Frameworks Patterns

TwitterNewsstand Kit

UIKitFoundation

No Siri Support (Jan 2012)

iOS����������� ������������������  Development����������� ������������������  Process

Tools Language

Frameworks Patterns

iOS����������� ������������������  Device����������� ������������������  Support

iOS����������� ������������������  Device����������� ������������������  Support

iPhone 4SiPhone 4

iOS����������� ������������������  Device����������� ������������������  Support

iPhone 4SiPhone 4

iPhone 3GSiPod Touch 3G/4G

iOS����������� ������������������  Device����������� ������������������  Support

iPhone 4SiPhone 4

iPhone 3GSiPod Touch 3G/4G

iPadiPad 2

INTRODUCTION����������� ������������������  TO����������� ������������������  ARC

INTRODUCTION����������� ������������������  TO����������� ������������������  ARCAUTOMATIC����������� ������������������  REFERENCE����������� ������������������  COUNTING����������� ������������������  

ARC����������� ������������������  Concept

ARC����������� ������������������  Concept

MyClass *myObj = [[MyClass alloc] init];[myObj someMethod]; // etc.[myObj release];

ARC����������� ������������������  Concept

ARC����������� ������������������  Concept

MyClass *myObj = [[MyClass alloc] init];[myObj someMethod]; // etc.[myObj release];

myObj

ARC����������� ������������������  Concept

MyClass *myObj = [[MyClass alloc] init];[myObj someMethod]; // etc.[myObj release];

myObj dangling pointer

ARC����������� ������������������  Concept

MyClass *myObj = [[MyClass alloc] init];[myObj someMethod]; // etc.[myObj release];[myObj someMethod]; // Boom!

myObj dangling pointer

ARC����������� ������������������  Concept

MyClass *myObj = [[MyClass alloc] init]; [myObj someMethod]; // etc. [myObj release]; [myObj someMethod]; // boom!

myObj dangling pointer

ARC����������� ������������������  Concept

MyClass *myObj = [[MyClass alloc] init]; [myObj someMethod]; // etc. [myObj release]; [myObj someMethod]; // boom!

myObj dangling pointer

MyClass *myObj2 = [[MyClass alloc] init]; [myObj2 someMethod]; // etc. !

myObj2

ARC����������� ������������������  Concept

MyClass *myObj = [[MyClass alloc] init]; [myObj someMethod]; // etc. [myObj release]; [myObj someMethod]; // boom!

myObj dangling pointer

memory leak

ARC����������� ������������������  Concept

MyClass *myObj = [[MyClass alloc] init]; [myObj someMethod]; // etc. [myObj release];

WHAT����������� ������������������  ARC����������� ������������������  MANAGE

WHAT����������� ������������������  ARC����������� ������������������  DOES����������� ������������������  AND����������� ������������������  DOESN’T����������� ������������������  MANAGE

WHAT����������� ������������������  ARC����������� ������������������  DOES����������� ������������������  AND����������� ������������������  DOESN’T����������� ������������������  MANAGE

myObj

MyClass *myObj = [[MyClass alloc] init];

WHAT����������� ������������������  ARC����������� ������������������  DOES����������� ������������������  AND����������� ������������������  DOESN’T����������� ������������������  MANAGE

myObj msg

MyClass *myObj = [[MyClass alloc] init];

strong references

NSString *msg = [NSString stringWithFormat:@"Hello"];

WHAT����������� ������������������  ARC����������� ������������������  DOES����������� ������������������  AND����������� ������������������  DOESN’T����������� ������������������  MANAGE

myObj msg

MyClass *myObj = [[MyClass alloc] init];

strong references

NSString *msg = [NSString stringWithFormat:@"Hello"];

WHAT����������� ������������������  ARC����������� ������������������  DOES����������� ������������������  AND����������� ������������������  DOESN’T����������� ������������������  MANAGE

myObj msg

MyClass *myObj = [[MyClass alloc] init];

strong references

NSString *msg = [NSString stringWithFormat:@"Hello"]; msg = nil;

WHAT����������� ������������������  ARC����������� ������������������  DOES����������� ������������������  AND����������� ������������������  DOESN’T����������� ������������������  MANAGE

NSString *msg = [NSString stringWithFormat:@"Hello"]; msg = nil;

ARC����������� ������������������  IS����������� ������������������  NOT����������� ������������������  GABAGE����������� ������������������  COLLECTION

ARC����������� ������������������  IS����������� ������������������  NOT����������� ������������������  GABAGE����������� ������������������  COLLECTION

GARBAGE COLLECTION

runtime

requires garbage collector

nondeterministic

ARC����������� ������������������  IS����������� ������������������  NOT����������� ������������������  GABAGE����������� ������������������  COLLECTION

GARBAGE COLLECTION

runtime

requires garbage collector

nondeterministic

ARC

compile-time

no charge to runtime model

predictable

THE����������� ������������������  RULE����������� ������������������  OF����������� ������������������  ARC

#1:����������� ������������������  DON’T����������� ������������������  CALL����������� ������������������  MEMORY����������� ������������������  MANAGEMENT����������� ������������������  METHOD

#1:����������� ������������������  DON’T����������� ������������������  CALL����������� ������������������  MEMORY����������� ������������������  MANAGEMENT����������� ������������������  METHOD

no retain

#1:����������� ������������������  DON’T����������� ������������������  CALL����������� ������������������  MEMORY����������� ������������������  MANAGEMENT����������� ������������������  METHOD

no retainno releaseno autorelease

#1:����������� ������������������  DON’T����������� ������������������  CALL����������� ������������������  MEMORY����������� ������������������  MANAGEMENT����������� ������������������  METHOD

no retainno releaseno autoreleaseno retainCount

#1:����������� ������������������  DON’T����������� ������������������  CALL����������� ������������������  MEMORY����������� ������������������  MANAGEMENT����������� ������������������  METHOD

no retainno releaseno autoreleaseno retainCountno dealloc

- (void)dealloc { [imageIcon release]; [name release]; [price release]; [super dealloc]; }

#1:����������� ������������������  DON’T����������� ������������������  CALL����������� ������������������  MEMORY����������� ������������������  MANAGEMENT����������� ������������������  METHOD

no retainno releaseno autoreleaseno retainCountno dealloc

#2:����������� ������������������  DON’T����������� ������������������  USE����������� ������������������  NSAUTORELEASEPOOL����������� ������������������  

#2:����������� ������������������  DON’T����������� ������������������  USE����������� ������������������  NSAUTORELEASEPOOL����������� ������������������  

NSAutoReleasePool����������� ������������������  replaced����������� ������������������  by����������� ������������������  @autoreleasepool����������� ������������������  block����������� ������������������  

#2:����������� ������������������  DON’T����������� ������������������  USE����������� ������������������  NSAUTORELEASEPOOL����������� ������������������  

NSAutoReleasePool����������� ������������������  replaced����������� ������������������  by����������� ������������������  @autoreleasepool����������� ������������������  block����������� ������������������  

int main(int argc, char *argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; int retVal = UIApplicationMain(argc, argv, nil, nil); [pool release]; return retVal; }

#2:����������� ������������������  DON’T����������� ������������������  USE����������� ������������������  NSAUTORELEASEPOOL����������� ������������������  

NSAutoReleasePool����������� ������������������  replaced����������� ������������������  by����������� ������������������  @autoreleasepool����������� ������������������  block����������� ������������������  

int main(int argc, char *argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; int retVal = UIApplicationMain(argc, argv, nil, nil); [pool release]; return retVal; }

#2:����������� ������������������  DON’T����������� ������������������  USE����������� ������������������  NSAUTORELEASEPOOL����������� ������������������  

NSAutoReleasePool����������� ������������������  replaced����������� ������������������  by����������� ������������������  @autoreleasepool����������� ������������������  block����������� ������������������  

int main(int argc, char *argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); } }

#3:����������� ������������������  NO����������� ������������������  OBJECT����������� ������������������  REFERENCES����������� ������������������  IN����������� ������������������  C����������� ������������������  STRUCTS

#3:����������� ������������������  NO����������� ������������������  OBJECT����������� ������������������  REFERENCES����������� ������������������  IN����������� ������������������  C����������� ������������������  STRUCTS

struct myStruct { int amount; NSString *name; };

#3:����������� ������������������  NO����������� ������������������  OBJECT����������� ������������������  REFERENCES����������� ������������������  IN����������� ������������������  C����������� ������������������  STRUCTS

struct myStruct { int amount; NSString *name; };

#4:����������� ������������������  NO����������� ������������������  CASUAL����������� ������������������  CASTING����������� ������������������  BETWEEN����������� ������������������  ID����������� ������������������  AND����������� ������������������  VOID*

#4:����������� ������������������  NO����������� ������������������  CASUAL����������� ������������������  CASTING����������� ������������������  BETWEEN����������� ������������������  ID����������� ������������������  AND����������� ������������������  VOID*

NSString *myString = (NSString *) myCFRef; !!!CFStringRef myNewCFRef = (CFStringRef) myObj;

#4:����������� ������������������  NO����������� ������������������  CASUAL����������� ������������������  CASTING����������� ������������������  BETWEEN����������� ������������������  ID����������� ������������������  AND����������� ������������������  VOID*

NSString *myString = (NSString *) myCFRef; !!!CFStringRef myNewCFRef = (CFStringRef) myObj;

#4:����������� ������������������  NO����������� ������������������  CASUAL����������� ������������������  CASTING����������� ������������������  BETWEEN����������� ������������������  ID����������� ������������������  AND����������� ������������������  VOID*

NSString *myString = (NSString *) myCFRef; !!!CFStringRef myNewCFRef = (CFStringRef) myObj;

#4:����������� ������������������  NO����������� ������������������  CASUAL����������� ������������������  CASTING����������� ������������������  BETWEEN����������� ������������������  ID����������� ������������������  AND����������� ������������������  VOID*

NSString *myString = (__bridge_transfer NSString *) myCFRef; !!!CFStringRef myNewCFRef = (__bridge_retained CFStringRef) myObj;

OTHER����������� ������������������  RULES

OTHER����������� ������������������  RULES

no NSZone no NSAllocateObject no NSDeallocateObject

USING����������� ������������������  WEAK����������� ������������������  REFERENCES

OBJECT����������� ������������������  GRAPHS

OBJECT����������� ������������������  GRAPHS

MyObjectA

C NSDateNSString NSArray

NSStringNSString NSString

B C

RETAIN����������� ������������������  CYCLES

strong referencesweak references

RETAIN����������� ������������������  CYCLES

Button A

strong referencesweak references

RETAIN����������� ������������������  CYCLES

Button A

B

strong referencesweak references

RETAIN����������� ������������������  CYCLES

Button A

B

Cstrong referencesweak references

RETAIN����������� ������������������  CYCLES

Button A

B

C

1

2

1strong referencesweak references

RETAIN����������� ������������������  CYCLES

Button A

B

C

1

2

1strong referencesweak references

RETAIN����������� ������������������  CYCLES

Button A

B

C

1

2

1strong referencesweak references

RETAIN����������� ������������������  CYCLES

A

B

C

1

2

1strong referencesweak references

RETAIN����������� ������������������  CYCLES

A

B

C

2

1strong referencesweak references

0

RETAIN����������� ������������������  CYCLES

B

C

2

1strong referencesweak references

RETAIN����������� ������������������  CYCLES

B

C 1strong referencesweak references

1

RETAIN����������� ������������������  CYCLES

B

C 1strong referencesweak references

1

WEAK����������� ������������������  REFERENCES

SomeObject *myParent = parentRef;

WEAK����������� ������������������  REFERENCES

SomeObject *myParent = parentRef;__weak

WEAK����������� ������������������  REFERENCES

SomeObject *myParent = parentRef;__weak

@property (weak) IBOutlet UILabel *myLabel; !@property (strong) NSString *myProperty;

RETAIN����������� ������������������  CYCLES

Button A

B

Cstrong referencesweak references

RETAIN����������� ������������������  CYCLES

Button A

B

Cstrong referencesweak references

RETAIN����������� ������������������  CYCLES

A

B

Cstrong referencesweak references

RETAIN����������� ������������������  CYCLES

B

Cstrong referencesweak references

RETAIN����������� ������������������  CYCLES

Cstrong referencesweak references

RETAIN����������� ������������������  CYCLES

strong referencesweak references

WEAK����������� ������������������  REFERENCES

Button A

B

Cstrong referencesweak references

WEAK����������� ������������������  REFERENCES

Button A

B

Cstrong referencesweak references

zeroing weak references

WEAK����������� ������������������  REFERENCES

Button A

B

Cstrong referencesweak references

zeroing weak references

someVar

WEAK����������� ������������������  REFERENCES

zeroing weak references

someVar

WEAK����������� ������������������  REFERENCES

zeroing weak references

someVarnil

ARC����������� ������������������  REFERENCES

ARC����������� ������������������  REFERENCES

Transitioning to ARC Release Noteshttp://developer.apple.com/library/ios/#releasenotes/ObjectiveC/RN-TransitioningToARC/_index.html����������� ������������������  

����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  =>����������� ������������������  Common Issues While Converting a Project����������� ������������������  !Xcode����������� ������������������  4.x����������� ������������������  >����������� ������������������  Organizer����������� ������������������  >����������� ������������������  Documentation����������� ������������������  >����������� ������������������  iOS����������� ������������������  5.0����������� ������������������  Library����������� ������������������  >����������� ������������������  Tools����������� ������������������  &����������� ������������������  Languages����������� ������������������  >����������� ������������������  Objective-C����������� ������������������  >����������� ������������������  Transitioning����������� ������������������  to����������� ������������������  ARC����������� ������������������  Release����������� ������������������  Notes����������� ������������������  

����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  =>����������� ������������������  Common Issues While Converting a Project

USING����������� ������������������  STORYBOARDS

STORYBOARDS

STORYBOARDS

ONE����������� ������������������  STORYBOARD����������� ������������������  PER����������� ������������������  APP

ONE����������� ������������������  STORYBOARD����������� ������������������  PER����������� ������������������  APP

ONE����������� ������������������  STORYBOARD����������� ������������������  PER����������� ������������������  APP

SCENES����������� ������������������  AND����������� ������������������  SEGUES

SCENES����������� ������������������  AND����������� ������������������  SEGUES

scene scene

SCENES����������� ������������������  AND����������� ������������������  SEGUES

scene scene

segue

NEW����������� ������������������  IN����������� ������������������  UIVIEWCONTROLLER

prepareForSegue:sender

DemoStoryboardExample

1:����������� ������������������  CREATE����������� ������������������  THE����������� ������������������  STORYBOARD

1:����������� ������������������  CREATE����������� ������������������  THE����������� ������������������  STORYBOARD

2:����������� ������������������  CREATE����������� ������������������  CUSTOM����������� ������������������  CLASS

2:����������� ������������������  CREATE����������� ������������������  CUSTOM����������� ������������������  CLASS

#import <Foundation/Foundation.h> !@interface Photo : NSObject !@property (nonatomic, strong) NSString *name; @property (nonatomic, strong) NSString *filename; @property (nonatomic, strong) NSString *notes; !@end

3:����������� ������������������  ADD����������� ������������������  CUSTOM����������� ������������������  VIEW����������� ������������������  CONTROLLER����������� ������������������  CLASSES

3:����������� ������������������  ADD����������� ������������������  CUSTOM����������� ������������������  VIEW����������� ������������������  CONTROLLER����������� ������������������  CLASSES

4:����������� ������������������  LOAD����������� ������������������  THE����������� ������������������  DATA

4:����������� ������������������  LOAD����������� ������������������  THE����������� ������������������  DATA

5:����������� ������������������  PASS����������� ������������������  THE����������� ������������������  OBJECT����������� ������������������  BETWEEN����������� ������������������  SCENES

5:����������� ������������������  PASS����������� ������������������  THE����������� ������������������  OBJECT����������� ������������������  BETWEEN����������� ������������������  SCENES

photo

DemoPassingPhotoData

ADDITIONAL����������� ������������������  FEATURES

ADDITIONAL����������� ������������������  FEATURES

ADDITIONAL����������� ������������������  FEATURES

iCloud

Newsstand

Twitter Integration

ADDITIONAL����������� ������������������  FEATURES

iCloud

Newsstand

Twitter Integration

UIStepper

ADDITIONAL����������� ������������������  FEATURES

iCloud

Newsstand

Twitter Integration

UIStepper

UIPageViewController

ADDITIONAL����������� ������������������  FEATURES

iCloud

Newsstand

Twitter Integration

UIStepper

UIPageViewController

ADDITIONAL����������� ������������������  FEATURES

UIAlertViewStyle����������� ������������������  

ADDITIONAL����������� ������������������  FEATURES

UIAlertViewStyle����������� ������������������  

ADDITIONAL����������� ������������������  FEATURES

UIAlertViewStyle����������� ������������������  

ADDITIONAL����������� ������������������  FEATURES

UIAlertViewStyle����������� ������������������  

감사합니다.����������� ������������������  !

@neoroman

Recommended