SlideShare a Scribd company logo
1 of 29
Download to read offline
ARC              iOS


      (id:ninjinkun / @ninjinkun)
•   Cocoa Touch

•   ARC

•   ARC

•
•   ARC

•
•   Tips
•          GC
Cocoa Touch

 •    retain / relase
     -(void)setName:(NSString *)newName {
         name = [newName retain];
     }

     -(void)dealloc {
         [name release];
         [super dealloc];                      1       3   0
     }



 •    Ownership

     •   Ownership                            retain

     •   Ownership                          release

 •                     0
Cocoa Touch
Autorelase

 •
 •   autorelease

 •                 release

 •                           /

     •
Cocoa Touch
Autorelase

 •
 •    autorelease

 •                                release

 •                                                        /

      •
  -(void)buildNewName {
      NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

          NSMutableArray *array = [[[NSMutableArray alloc] init] autorelease];
          [array addObject:@"hoge"];
          [array addObject:@"fuga"];
          [array addObject:@"piyo"];
          name =[array componentsJoinedByString:@","];

          [pool drain];
  }
ARC

•   Automatic Reference Counting
•
•   iOS 5 / Mac OS X 10.7
ARC

•
    •

•                     (GC)

•   Static Analyzer
ARC

•
    @interface NonARCObject : NSObject {
        NSString *name;
    }
    -(id)initWithName:(NSString *)name;
    @end

    @implementation NonARCObject

    -(id)initWithName:(NSString *)newName {
        self = [super init];
        if (self) {
            name = [newName retain];
        }
        return self;
    }

    -(void)dealloc {
         [name release];
         [super dealloc];
    }
    @end
ARC

•
    @interface ARCObject : NSObject {
        NSString *name;
    }
    -(id)initWithName:(NSString *)name;
    @end

    @implementation ARCObject

    -(id)initWithName:(NSString *)newName {
        self = [super init];
        if (self) {
            name = newName;
        }
        return self;
    }

    @end
ARC
ARC

 •
     •   …

 •
     •
 •
 •
ARC
                  __strong

•
•   Ownership

•
    •                  retain,                                release
    -(void)buildNewName {
        {
            __strong NSMutableArray *array = [[NSMutableArray alloc] init];
            [array addObject:@"hoge"];
            [array addObject:@"fuga"];
            [array addObject:@"piyo"];
            name =[array componentsJoinedByString:@","];
        }
    }



                                                                   !
ARC
                  __strong

•
    •                  retain, dealloc                   relase

    @interface ARCUser : NSObject {
        __strong NSString *name;
    }
    @end

    @implementation ARCUser

    -(id)initWithName:(NSString *)newName {
        self = [super init];
        if (self) {
            name = newName; //                 [newName retain]
        }
        return self;
    }

    -(void)dealloc {
        //                    [name release]
    }
    @end
ARC
                   __weak

•    __weak
    •
    •   Ownership

    •                                 nil

        •
    •   iOS 5

    @interface ARCUser : NSObject {
        __weak id delegate;
    }
    @end
ARC
                    __unsafe_unretainded

•
    •    assign

•
•   iOS 4.3
        @interface ARCUser : NSObject {
            __unsafe_unretained id delegate;
        }
        @end
ARC
                 __autoreleasing

•   autorelase

•
•                   @autorelasepool { }
     -(NSArray *)comvertImageToJpeg:(NSArray *)files {
         NSMutableArray *dataStore = [NSMutableArray array];
         @autoreleasepool {
             for (NSString *filePath in files) {
                 __autoreleasing UIImage *image = [[UIImage alloc]
     initWithContentsOfFile:filePath];
                 NSData *data = UIImageJPEGRepresentation(image, 1.0);
                 [dataStore addObject:data];
             }
         }
         return [dataStore copy];
     }
ARC

•   retain, release, autorelase

    •    retainCount

•   [super dealloc]

    •    dealloc
           -(void)dealloc {
               delegate = nil;
           }



•   C                                              __bridge
        NSString *str = @"hogehoge";
        CFStringRef strRef = (__bridge CFStringRef)str;


    CFStringRef strRef = (__bridge_retained CFStringRef)str;
•   ARC   __strong

•           __strong



                __strong

                        __strong



            __strong               __strong



                       __strong
•   iOS 5           __weak

•   iOS 4.3          __unsafe_unretaind

•             nil

                         __strong

                                 __weak



                     __strong              __strong



                                __strong
ARC

•
ARC
retain / relase

 •   -S

     •
 •   _objc_release()
 •   _objc_retain()
 •   _objc_retainAutoreleasedReturnValue()
ARC
__weak

 •   _objc_storeWeak()

 •                  0    _objc_destroyWeak()

     •
     •             nil

     •


                                    This document is licensed to ninjin@mac.com.
Blocks

 •   ARC

 •   self                             ?

     •
 •   release

 •   BlocksKit
     UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
     [button addEventHandler:^(id sender) {
         [self showPhotoPickerView];
     } forControlEvents:UIControlEventTouchUpInside];
     [self.view addSubview:button];
Blocks

 •
  UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];

  __unsafe_unretained id _self = self; // !?

  [button addEventHandler:^(id sender) {
      [_self showPhotoPickerView];
  } forControlEvents:UIControlEventTouchUpInside];
  [self.view addSubview:button];
Blocks

 •
  UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];

  __unsafe_unretained id _self = self; // !?

  [button addEventHandler:^(id sender) {
                                                !?
      [_self showPhotoPickerView];
  } forControlEvents:UIControlEventTouchUpInside];
  [self.view addSubview:button];
Tips
ARC

 •   -fno-objc-arc
Tips
ARC

 •   Static Library

     •                 Static Library

     •                Workspace
Tips

 •   ARC

 •   iOS 5       __weak

 •   Blocks

     •   UI

     •   UI   Blocks
GC

•   GC

    •   iOS

    •
•
    •   CPU
•   ARC

•            (   )

•   __weak

•   GC

    •
    •                (   )

•   ARC

More Related Content

What's hot

ISUCONアプリを Pythonで書いてみた
ISUCONアプリを Pythonで書いてみたISUCONアプリを Pythonで書いてみた
ISUCONアプリを Pythonで書いてみた
memememomo
 
MongoDB: tips, trick and hacks
MongoDB: tips, trick and hacksMongoDB: tips, trick and hacks
MongoDB: tips, trick and hacks
Scott Hernandez
 
Hacking Mac OSX Cocoa API from Perl
Hacking Mac OSX Cocoa API from PerlHacking Mac OSX Cocoa API from Perl
Hacking Mac OSX Cocoa API from Perl
typester
 

What's hot (20)

ISUCONアプリを Pythonで書いてみた
ISUCONアプリを Pythonで書いてみたISUCONアプリを Pythonで書いてみた
ISUCONアプリを Pythonで書いてみた
 
Modernizes your objective C - Oliviero
Modernizes your objective C - OlivieroModernizes your objective C - Oliviero
Modernizes your objective C - Oliviero
 
Scala active record
Scala active recordScala active record
Scala active record
 
Drush - use full power - DrupalCamp Donetsk 2014
Drush - use full power - DrupalCamp Donetsk 2014Drush - use full power - DrupalCamp Donetsk 2014
Drush - use full power - DrupalCamp Donetsk 2014
 
ES6: Features + Rails
ES6: Features + RailsES6: Features + Rails
ES6: Features + Rails
 
Nubilus Perl
Nubilus PerlNubilus Perl
Nubilus Perl
 
Modernize your Objective-C
Modernize your Objective-CModernize your Objective-C
Modernize your Objective-C
 
Play á la Rails
Play á la RailsPlay á la Rails
Play á la Rails
 
dotCloud and go
dotCloud and godotCloud and go
dotCloud and go
 
Perl Web Client
Perl Web ClientPerl Web Client
Perl Web Client
 
Go Web Development
Go Web DevelopmentGo Web Development
Go Web Development
 
I os 04
I os 04I os 04
I os 04
 
Learning jQuery in 30 minutes
Learning jQuery in 30 minutesLearning jQuery in 30 minutes
Learning jQuery in 30 minutes
 
Drush. Secrets come out.
Drush. Secrets come out.Drush. Secrets come out.
Drush. Secrets come out.
 
JS Level Up: Prototypes
JS Level Up: PrototypesJS Level Up: Prototypes
JS Level Up: Prototypes
 
MongoDB: tips, trick and hacks
MongoDB: tips, trick and hacksMongoDB: tips, trick and hacks
MongoDB: tips, trick and hacks
 
Hacking Mac OSX Cocoa API from Perl
Hacking Mac OSX Cocoa API from PerlHacking Mac OSX Cocoa API from Perl
Hacking Mac OSX Cocoa API from Perl
 
XQuery Rocks
XQuery RocksXQuery Rocks
XQuery Rocks
 
ES6 is Nigh
ES6 is NighES6 is Nigh
ES6 is Nigh
 
Automatic Reference Counting
Automatic Reference CountingAutomatic Reference Counting
Automatic Reference Counting
 

Viewers also liked

Core Graphicsでつくる自作UIコンポーネント入門
Core Graphicsでつくる自作UIコンポーネント入門Core Graphicsでつくる自作UIコンポーネント入門
Core Graphicsでつくる自作UIコンポーネント入門
cocopon
 
120529 railsとか勉強会v2
120529 railsとか勉強会v2120529 railsとか勉強会v2
120529 railsとか勉強会v2
Yoshiteru Toki
 

Viewers also liked (15)

Air printで遊んでみた
Air printで遊んでみたAir printで遊んでみた
Air printで遊んでみた
 
Sencha study
Sencha studySencha study
Sencha study
 
Core Graphicsでつくる自作UIコンポーネント入門
Core Graphicsでつくる自作UIコンポーネント入門Core Graphicsでつくる自作UIコンポーネント入門
Core Graphicsでつくる自作UIコンポーネント入門
 
mq 使ってみたよ
mq 使ってみたよmq 使ってみたよ
mq 使ってみたよ
 
vImageのススメ
vImageのススメvImageのススメ
vImageのススメ
 
Amazon ec2とは何か?
Amazon ec2とは何か?Amazon ec2とは何か?
Amazon ec2とは何か?
 
Herokuで作るdevise認証サイト
Herokuで作るdevise認証サイトHerokuで作るdevise認証サイト
Herokuで作るdevise認証サイト
 
120529 railsとか勉強会v2
120529 railsとか勉強会v2120529 railsとか勉強会v2
120529 railsとか勉強会v2
 
Memory management in Objective C
Memory management in Objective CMemory management in Objective C
Memory management in Objective C
 
Android & IOS
Android & IOSAndroid & IOS
Android & IOS
 
iOS Memory Management
iOS Memory ManagementiOS Memory Management
iOS Memory Management
 
Memory management in Andoid
Memory management in AndoidMemory management in Andoid
Memory management in Andoid
 
いまさら聞けないUnity小技
いまさら聞けないUnity小技いまさら聞けないUnity小技
いまさら聞けないUnity小技
 
Apple iOS - A modern way to mobile operating system
Apple iOS - A modern way to mobile operating systemApple iOS - A modern way to mobile operating system
Apple iOS - A modern way to mobile operating system
 
Unity5.3の機能まとめ
Unity5.3の機能まとめUnity5.3の機能まとめ
Unity5.3の機能まとめ
 

Similar to ARCでめちゃモテiOSプログラマー

Objective-C Survives
Objective-C SurvivesObjective-C Survives
Objective-C Survives
S Akai
 
FI MUNI 2012 - iOS Basics
FI MUNI 2012 - iOS BasicsFI MUNI 2012 - iOS Basics
FI MUNI 2012 - iOS Basics
Petr Dvorak
 
I phoneアプリの通信エラー処理
I phoneアプリの通信エラー処理I phoneアプリの通信エラー処理
I phoneアプリの通信エラー処理
Satoshi Asano
 
Hızlı Cocoa Geliştirme (Develop your next cocoa app faster!)
Hızlı Cocoa Geliştirme (Develop your next cocoa app faster!)Hızlı Cocoa Geliştirme (Develop your next cocoa app faster!)
Hızlı Cocoa Geliştirme (Develop your next cocoa app faster!)
Sarp Erdag
 
Arc of developer part1
Arc of developer part1Arc of developer part1
Arc of developer part1
Junpei Wada
 
スマートフォン勉強会@関東 #11 どう考えてもdisconなものをiPhoneに移植してみた
スマートフォン勉強会@関東 #11 どう考えてもdisconなものをiPhoneに移植してみたスマートフォン勉強会@関東 #11 どう考えてもdisconなものをiPhoneに移植してみた
スマートフォン勉強会@関東 #11 どう考えてもdisconなものをiPhoneに移植してみた
Taro Matsuzawa
 
Beginning icloud development - Cesare Rocchi - WhyMCA
Beginning icloud development - Cesare Rocchi - WhyMCABeginning icloud development - Cesare Rocchi - WhyMCA
Beginning icloud development - Cesare Rocchi - WhyMCA
Whymca
 

Similar to ARCでめちゃモテiOSプログラマー (20)

Objective-C Survives
Objective-C SurvivesObjective-C Survives
Objective-C Survives
 
MFF UK - Introduction to iOS
MFF UK - Introduction to iOSMFF UK - Introduction to iOS
MFF UK - Introduction to iOS
 
FI MUNI 2012 - iOS Basics
FI MUNI 2012 - iOS BasicsFI MUNI 2012 - iOS Basics
FI MUNI 2012 - iOS Basics
 
Developing iOS REST Applications
Developing iOS REST ApplicationsDeveloping iOS REST Applications
Developing iOS REST Applications
 
Leaks & Zombies
Leaks & ZombiesLeaks & Zombies
Leaks & Zombies
 
iPhone dev intro
iPhone dev introiPhone dev intro
iPhone dev intro
 
Beginning to iPhone development
Beginning to iPhone developmentBeginning to iPhone development
Beginning to iPhone development
 
Objective C Memory Management
Objective C Memory ManagementObjective C Memory Management
Objective C Memory Management
 
I phoneアプリの通信エラー処理
I phoneアプリの通信エラー処理I phoneアプリの通信エラー処理
I phoneアプリの通信エラー処理
 
Hızlı Cocoa Geliştirme (Develop your next cocoa app faster!)
Hızlı Cocoa Geliştirme (Develop your next cocoa app faster!)Hızlı Cocoa Geliştirme (Develop your next cocoa app faster!)
Hızlı Cocoa Geliştirme (Develop your next cocoa app faster!)
 
Agile Iphone Development
Agile Iphone DevelopmentAgile Iphone Development
Agile Iphone Development
 
iPhone Memory Management
iPhone Memory ManagementiPhone Memory Management
iPhone Memory Management
 
Arc of developer part1
Arc of developer part1Arc of developer part1
Arc of developer part1
 
Iphone course 1
Iphone course 1Iphone course 1
Iphone course 1
 
スマートフォン勉強会@関東 #11 どう考えてもdisconなものをiPhoneに移植してみた
スマートフォン勉強会@関東 #11 どう考えてもdisconなものをiPhoneに移植してみたスマートフォン勉強会@関東 #11 どう考えてもdisconなものをiPhoneに移植してみた
スマートフォン勉強会@関東 #11 どう考えてもdisconなものをiPhoneに移植してみた
 
Using Protocol to Refactor
Using Protocol to Refactor Using Protocol to Refactor
Using Protocol to Refactor
 
Introduction to Objective - C
Introduction to Objective - CIntroduction to Objective - C
Introduction to Objective - C
 
Freebase and the iPhone
Freebase and the iPhoneFreebase and the iPhone
Freebase and the iPhone
 
Beginning icloud development - Cesare Rocchi - WhyMCA
Beginning icloud development - Cesare Rocchi - WhyMCABeginning icloud development - Cesare Rocchi - WhyMCA
Beginning icloud development - Cesare Rocchi - WhyMCA
 
I phone勉強会 (2011.11.23)
I phone勉強会 (2011.11.23)I phone勉強会 (2011.11.23)
I phone勉強会 (2011.11.23)
 

More from Satoshi Asano (9)

GitHub活動を通して個人のキャリアを積みつつ仕事の成果を出す方法
GitHub活動を通して個人のキャリアを積みつつ仕事の成果を出す方法GitHub活動を通して個人のキャリアを積みつつ仕事の成果を出す方法
GitHub活動を通して個人のキャリアを積みつつ仕事の成果を出す方法
 
iPhoneアプリとAndroidアプリを比較する〜はてなブックマーク開発の現場から〜
iPhoneアプリとAndroidアプリを比較する〜はてなブックマーク開発の現場から〜iPhoneアプリとAndroidアプリを比較する〜はてなブックマーク開発の現場から〜
iPhoneアプリとAndroidアプリを比較する〜はてなブックマーク開発の現場から〜
 
Google Analytics & iPhone
Google Analytics & iPhoneGoogle Analytics & iPhone
Google Analytics & iPhone
 
iPhoneアプリ開発講座Web連携アプリ編
iPhoneアプリ開発講座Web連携アプリ編iPhoneアプリ開発講座Web連携アプリ編
iPhoneアプリ開発講座Web連携アプリ編
 
Asihttp requestについて
Asihttp requestについてAsihttp requestについて
Asihttp requestについて
 
バックグラウンド位置取得について
バックグラウンド位置取得についてバックグラウンド位置取得について
バックグラウンド位置取得について
 
iPhoneアプリ開発講座入門編
iPhoneアプリ開発講座入門編iPhoneアプリ開発講座入門編
iPhoneアプリ開発講座入門編
 
集合知プログラミング第2章復習
集合知プログラミング第2章復習集合知プログラミング第2章復習
集合知プログラミング第2章復習
 
Algorithm Introduction #18 B-Tree
Algorithm Introduction #18 B-TreeAlgorithm Introduction #18 B-Tree
Algorithm Introduction #18 B-Tree
 

Recently uploaded

Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 

Recently uploaded (20)

The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 

ARCでめちゃモテiOSプログラマー

  • 1. ARC iOS (id:ninjinkun / @ninjinkun)
  • 2. Cocoa Touch • ARC • ARC • • ARC • • Tips • GC
  • 3. Cocoa Touch • retain / relase -(void)setName:(NSString *)newName { name = [newName retain]; } -(void)dealloc { [name release]; [super dealloc]; 1 3 0 } • Ownership • Ownership retain • Ownership release • 0
  • 4. Cocoa Touch Autorelase • • autorelease • release • / •
  • 5. Cocoa Touch Autorelase • • autorelease • release • / • -(void)buildNewName { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSMutableArray *array = [[[NSMutableArray alloc] init] autorelease]; [array addObject:@"hoge"]; [array addObject:@"fuga"]; [array addObject:@"piyo"]; name =[array componentsJoinedByString:@","]; [pool drain]; }
  • 6. ARC • Automatic Reference Counting • • iOS 5 / Mac OS X 10.7
  • 7. ARC • • • (GC) • Static Analyzer
  • 8. ARC • @interface NonARCObject : NSObject { NSString *name; } -(id)initWithName:(NSString *)name; @end @implementation NonARCObject -(id)initWithName:(NSString *)newName { self = [super init]; if (self) { name = [newName retain]; } return self; } -(void)dealloc { [name release]; [super dealloc]; } @end
  • 9. ARC • @interface ARCObject : NSObject { NSString *name; } -(id)initWithName:(NSString *)name; @end @implementation ARCObject -(id)initWithName:(NSString *)newName { self = [super init]; if (self) { name = newName; } return self; } @end
  • 10. ARC ARC • • … • • • •
  • 11. ARC __strong • • Ownership • • retain, release -(void)buildNewName { { __strong NSMutableArray *array = [[NSMutableArray alloc] init]; [array addObject:@"hoge"]; [array addObject:@"fuga"]; [array addObject:@"piyo"]; name =[array componentsJoinedByString:@","]; } } !
  • 12. ARC __strong • • retain, dealloc relase @interface ARCUser : NSObject { __strong NSString *name; } @end @implementation ARCUser -(id)initWithName:(NSString *)newName { self = [super init]; if (self) { name = newName; // [newName retain] } return self; } -(void)dealloc { // [name release] } @end
  • 13. ARC __weak • __weak • • Ownership • nil • • iOS 5 @interface ARCUser : NSObject { __weak id delegate; } @end
  • 14. ARC __unsafe_unretainded • • assign • • iOS 4.3 @interface ARCUser : NSObject { __unsafe_unretained id delegate; } @end
  • 15. ARC __autoreleasing • autorelase • • @autorelasepool { } -(NSArray *)comvertImageToJpeg:(NSArray *)files { NSMutableArray *dataStore = [NSMutableArray array]; @autoreleasepool { for (NSString *filePath in files) { __autoreleasing UIImage *image = [[UIImage alloc] initWithContentsOfFile:filePath]; NSData *data = UIImageJPEGRepresentation(image, 1.0); [dataStore addObject:data]; } } return [dataStore copy]; }
  • 16. ARC • retain, release, autorelase • retainCount • [super dealloc] • dealloc -(void)dealloc { delegate = nil; } • C __bridge NSString *str = @"hogehoge"; CFStringRef strRef = (__bridge CFStringRef)str; CFStringRef strRef = (__bridge_retained CFStringRef)str;
  • 17. ARC __strong • __strong __strong __strong __strong __strong __strong
  • 18. iOS 5 __weak • iOS 4.3 __unsafe_unretaind • nil __strong __weak __strong __strong __strong
  • 20. ARC retain / relase • -S • • _objc_release() • _objc_retain() • _objc_retainAutoreleasedReturnValue()
  • 21. ARC __weak • _objc_storeWeak() • 0 _objc_destroyWeak() • • nil • This document is licensed to ninjin@mac.com.
  • 22. Blocks • ARC • self ? • • release • BlocksKit UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; [button addEventHandler:^(id sender) { [self showPhotoPickerView]; } forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:button];
  • 23. Blocks • UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; __unsafe_unretained id _self = self; // !? [button addEventHandler:^(id sender) { [_self showPhotoPickerView]; } forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:button];
  • 24. Blocks • UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; __unsafe_unretained id _self = self; // !? [button addEventHandler:^(id sender) { !? [_self showPhotoPickerView]; } forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:button];
  • 25. Tips ARC • -fno-objc-arc
  • 26. Tips ARC • Static Library • Static Library • Workspace
  • 27. Tips • ARC • iOS 5 __weak • Blocks • UI • UI Blocks
  • 28. GC • GC • iOS • • • CPU
  • 29. ARC • ( ) • __weak • GC • • ( ) • ARC