SlideShare uma empresa Scribd logo
1 de 23
Automatic Reference
    Counting
     CocoaHeads Lyon
ARC n’est pas
• Une nouvelle façon de gérer la mémoire
• Un ramasse-miettes
 • déterministe
 • pas d’examen de la mémoire durant
    l’exécution
 • pas de gestion des cycles de retenu
Comment gérer la
  mémoire ?
Comment gérer la
          mémoire ?


Manuellement
(dans le code)
Comment gérer la
          mémoire ?


Manuellement          À l’exécution
(dans le code)        (avec le GC)
Comment gérer la
          mémoire ?

                 Entre les deux !
                   (avec ARC)
Manuellement                        À l’exécution
(dans le code)                      (avec le GC)
Pourquoi ARC ?

• Gérer la mémoire n’est pas simple
 • Beaucoup de règles et de conventions
 • Facile de faire des erreurs
• Le ramasse-miettes
@implementation Stack
{ NSMutableArray array; }

- (id)init {
    self = [super init];
    if ( self )
        array = [NSMutableArray array];
    return self;
}

- (void)push:(id)object {
    [array addObject:object];
}

- (id)pop {
    id object = [array lastObject];
    [array removeLastObject];
    return object;
}
Qu’est-ce que ARC ?

• Une extension du langage Objective-C
 • automatisation des retain/release
 • de nouveaux mot-clés
 • de nouvelles règles
Automatisation des
     retain/release


• Oubliez-les !
Nouveaux mot-clés

• __strong
• __weak
• __autoreleasing
• __unsafe_unretained
Nouveaux mot-clés

• __strong
 • qualiticatif par défaut
 • retain/release quand modifié
Nouveaux mot-clés

• __weak
 • pas de retenu de l’object
 • mise à zéro quand l’objet est détruit
 • delegate
Nouveaux mot-clés

• __autoreleasing
 • l’objet est retenu et autoreleasé
 • utilisé pour le renvoi d’objets par
    pointeur
 - (BOOL)removeItemAtURL:(NSURL *)URL
 error:(NSError **)outError;
Nouveaux mot-clés

• __unsafe_unretained
 • pas de gestion par ARC
 • aucune garantie que l’objet existe encore
Nouvelles règles


• retain, release, autorelease et retainCount
  sont interdits
  • laissez ARC compter les références
Nouvelles règles

• Plus de NSAutoreleasePool
 •   NSString *string;
     @autoreleasepool {
         string = [self description];
     }
     return string;
Nouvelles règles


• pas de cast de id vers un autre type
 • ARC ignore comment sont gérés les
    autres types
Nouvelles règles

• Mot-clés supplémentaires
 id value;
 CFArrayAppendValue(array, (__bridge const void *)value);

 CFDataRef ref = CFDataCreate(NULL, bytes, length);
 NSData *data = (__bridge_transfer NSData *)ref;

 CFStringRef str = (__bridge_retain CFStringRef)[self description];
Nouvelles règles

• Pas de id dans une structure
• Pas de modification de self
• Pas de modification d’une variable
  énumérée avec Fast Enumeration
Et les blocks
 - (dispatch_block_t)makeABlock {
     return ^{
          [self performSomeTask];
     };
 }

• Ça marche !
Est-ce plus lent ?
• Non !
 • nouveau autorelease pool
 • optimizations
   • objc_retain, objc_release
   • objc_autoreleaseReturnValue
   • objc_retainAutoreleasedReturnValue
Démo !

Mais conteúdo relacionado

Destaque

Proyecto de cindy y vale
Proyecto de cindy y valeProyecto de cindy y vale
Proyecto de cindy y valeCINDY GINETH
 
Uso del internet en la enseñanza del ingles
Uso del internet en la enseñanza del inglesUso del internet en la enseñanza del ingles
Uso del internet en la enseñanza del inglesRobiin Castro
 
30 10 Brit Se Ve Muy Bien
30 10 Brit Se Ve Muy Bien30 10 Brit Se Ve Muy Bien
30 10 Brit Se Ve Muy Bienacunato
 
Jolies Bebettes.Bab
Jolies Bebettes.BabJolies Bebettes.Bab
Jolies Bebettes.Babguest9d62db
 
Opinionway pour Le Figaro - Elections municipales 2014 / Sondage jour du vote...
Opinionway pour Le Figaro - Elections municipales 2014 / Sondage jour du vote...Opinionway pour Le Figaro - Elections municipales 2014 / Sondage jour du vote...
Opinionway pour Le Figaro - Elections municipales 2014 / Sondage jour du vote...contactOpinionWay
 
Documentos tecnicos y cientificos
Documentos tecnicos y cientificosDocumentos tecnicos y cientificos
Documentos tecnicos y cientificosyiiineee
 
Présentation couverturues autoportantes
Présentation couverturues autoportantesPrésentation couverturues autoportantes
Présentation couverturues autoportantesINCOPERFIL
 
Contre révolition politique def saber dahi
Contre révolition politique def saber dahiContre révolition politique def saber dahi
Contre révolition politique def saber dahiSonia Charbti
 
Fiche perso profil
Fiche perso profilFiche perso profil
Fiche perso profilcherichou
 
Pis de sistemas
Pis de sistemas Pis de sistemas
Pis de sistemas laura1gomez
 
OLPC / Ondalivre - Pro und Kontra
OLPC / Ondalivre - Pro und KontraOLPC / Ondalivre - Pro und Kontra
OLPC / Ondalivre - Pro und KontraStefan Rovetto
 

Destaque (20)

Proyecto de cindy y vale
Proyecto de cindy y valeProyecto de cindy y vale
Proyecto de cindy y vale
 
Uso del internet en la enseñanza del ingles
Uso del internet en la enseñanza del inglesUso del internet en la enseñanza del ingles
Uso del internet en la enseñanza del ingles
 
Daos
DaosDaos
Daos
 
Trabajo de taller cat.
Trabajo de taller cat.Trabajo de taller cat.
Trabajo de taller cat.
 
Estimado señor gómez
Estimado señor gómezEstimado señor gómez
Estimado señor gómez
 
Allan kardec
Allan kardecAllan kardec
Allan kardec
 
30 10 Brit Se Ve Muy Bien
30 10 Brit Se Ve Muy Bien30 10 Brit Se Ve Muy Bien
30 10 Brit Se Ve Muy Bien
 
Jolies Bebettes.Bab
Jolies Bebettes.BabJolies Bebettes.Bab
Jolies Bebettes.Bab
 
Opinionway pour Le Figaro - Elections municipales 2014 / Sondage jour du vote...
Opinionway pour Le Figaro - Elections municipales 2014 / Sondage jour du vote...Opinionway pour Le Figaro - Elections municipales 2014 / Sondage jour du vote...
Opinionway pour Le Figaro - Elections municipales 2014 / Sondage jour du vote...
 
Documentos tecnicos y cientificos
Documentos tecnicos y cientificosDocumentos tecnicos y cientificos
Documentos tecnicos y cientificos
 
Présentation couverturues autoportantes
Présentation couverturues autoportantesPrésentation couverturues autoportantes
Présentation couverturues autoportantes
 
Contre révolition politique def saber dahi
Contre révolition politique def saber dahiContre révolition politique def saber dahi
Contre révolition politique def saber dahi
 
Fiche perso profil
Fiche perso profilFiche perso profil
Fiche perso profil
 
Pis de sistemas
Pis de sistemas Pis de sistemas
Pis de sistemas
 
Trabajo
TrabajoTrabajo
Trabajo
 
Wissensdrehscheibe
WissensdrehscheibeWissensdrehscheibe
Wissensdrehscheibe
 
SC-013-S/OC/NR-2014
SC-013-S/OC/NR-2014SC-013-S/OC/NR-2014
SC-013-S/OC/NR-2014
 
Media 07
Media 07Media 07
Media 07
 
OLPC / Ondalivre - Pro und Kontra
OLPC / Ondalivre - Pro und KontraOLPC / Ondalivre - Pro und Kontra
OLPC / Ondalivre - Pro und Kontra
 
List 24
List 24List 24
List 24
 

CocoaHeads Lyon 17/12/2011 : Arc

  • 1. Automatic Reference Counting CocoaHeads Lyon
  • 2. ARC n’est pas • Une nouvelle façon de gérer la mémoire • Un ramasse-miettes • déterministe • pas d’examen de la mémoire durant l’exécution • pas de gestion des cycles de retenu
  • 3. Comment gérer la mémoire ?
  • 4. Comment gérer la mémoire ? Manuellement (dans le code)
  • 5. Comment gérer la mémoire ? Manuellement À l’exécution (dans le code) (avec le GC)
  • 6. Comment gérer la mémoire ? Entre les deux ! (avec ARC) Manuellement À l’exécution (dans le code) (avec le GC)
  • 7. Pourquoi ARC ? • Gérer la mémoire n’est pas simple • Beaucoup de règles et de conventions • Facile de faire des erreurs • Le ramasse-miettes
  • 8. @implementation Stack { NSMutableArray array; } - (id)init { self = [super init]; if ( self ) array = [NSMutableArray array]; return self; } - (void)push:(id)object { [array addObject:object]; } - (id)pop { id object = [array lastObject]; [array removeLastObject]; return object; }
  • 9. Qu’est-ce que ARC ? • Une extension du langage Objective-C • automatisation des retain/release • de nouveaux mot-clés • de nouvelles règles
  • 10. Automatisation des retain/release • Oubliez-les !
  • 11. Nouveaux mot-clés • __strong • __weak • __autoreleasing • __unsafe_unretained
  • 12. Nouveaux mot-clés • __strong • qualiticatif par défaut • retain/release quand modifié
  • 13. Nouveaux mot-clés • __weak • pas de retenu de l’object • mise à zéro quand l’objet est détruit • delegate
  • 14. Nouveaux mot-clés • __autoreleasing • l’objet est retenu et autoreleasé • utilisé pour le renvoi d’objets par pointeur - (BOOL)removeItemAtURL:(NSURL *)URL error:(NSError **)outError;
  • 15. Nouveaux mot-clés • __unsafe_unretained • pas de gestion par ARC • aucune garantie que l’objet existe encore
  • 16. Nouvelles règles • retain, release, autorelease et retainCount sont interdits • laissez ARC compter les références
  • 17. Nouvelles règles • Plus de NSAutoreleasePool • NSString *string; @autoreleasepool { string = [self description]; } return string;
  • 18. Nouvelles règles • pas de cast de id vers un autre type • ARC ignore comment sont gérés les autres types
  • 19. Nouvelles règles • Mot-clés supplémentaires id value; CFArrayAppendValue(array, (__bridge const void *)value); CFDataRef ref = CFDataCreate(NULL, bytes, length); NSData *data = (__bridge_transfer NSData *)ref; CFStringRef str = (__bridge_retain CFStringRef)[self description];
  • 20. Nouvelles règles • Pas de id dans une structure • Pas de modification de self • Pas de modification d’une variable énumérée avec Fast Enumeration
  • 21. Et les blocks - (dispatch_block_t)makeABlock { return ^{ [self performSomeTask]; }; } • Ça marche !
  • 22. Est-ce plus lent ? • Non ! • nouveau autorelease pool • optimizations • objc_retain, objc_release • objc_autoreleaseReturnValue • objc_retainAutoreleasedReturnValue

Notas do Editor

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n