SlideShare une entreprise Scribd logo
1  sur  29
Télécharger pour lire hors ligne
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

Contenu connexe

Tendances

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
 

Tendances (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
 

En vedette

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
 

En vedette (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の機能まとめ
 

Similaire à 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
 

Similaire à 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)
 

Plus de 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
 

Dernier

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
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 
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@
 

Dernier (20)

Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
 
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
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering Developers
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
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
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
+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...
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 

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