ios 5 & xcode 4: arc, stroryboards
DESCRIPTION
Describe new things in iOS 5 and Xcode 4TRANSCRIPT
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