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 dura...
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             ...
Pourquoi ARC ?• Gérer la mémoire n’est pas simple • Beaucoup de règles et de conventions • Facile de faire des erreurs• Le...
@implementation Stack{ NSMutableArray array; }- (id)init {    self = [super init];    if ( self )        array = [NSMutabl...
Qu’est-ce que ARC ?• Une extension du langage Objective-C • automatisation des retain/release • de nouveaux mot-clés • de ...
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 -...
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 descriptio...
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 re...
Nouvelles règles• Pas de id dans une structure• Pas de modification de self• Pas de modification d’une variable  énumérée av...
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_autoreleaseRet...
Démo !
Prochain SlideShare
Chargement dans…5
×

CocoaHeads Lyon 17/12/2011 : Arc

333 vues

Publié le

"ARC"
Par Nicolas Bachschmidt aux CocoaHeads Lyon du 17 novembre 2011.

Publié dans : Technologie
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
333
Sur SlideShare
0
Issues des intégrations
0
Intégrations
2
Actions
Partages
0
Téléchargements
0
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • CocoaHeads Lyon 17/12/2011 : Arc

    1. 1. Automatic Reference Counting CocoaHeads Lyon
    2. 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. 3. Comment gérer la mémoire ?
    4. 4. Comment gérer la mémoire ?Manuellement(dans le code)
    5. 5. Comment gérer la mémoire ?Manuellement À l’exécution(dans le code) (avec le GC)
    6. 6. Comment gérer la mémoire ? Entre les deux ! (avec ARC)Manuellement À l’exécution(dans le code) (avec le GC)
    7. 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. 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. 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. 10. Automatisation des retain/release• Oubliez-les !
    11. 11. Nouveaux mot-clés• __strong• __weak• __autoreleasing• __unsafe_unretained
    12. 12. Nouveaux mot-clés• __strong • qualiticatif par défaut • retain/release quand modifié
    13. 13. Nouveaux mot-clés• __weak • pas de retenu de l’object • mise à zéro quand l’objet est détruit • delegate
    14. 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. 15. Nouveaux mot-clés• __unsafe_unretained • pas de gestion par ARC • aucune garantie que l’objet existe encore
    16. 16. Nouvelles règles• retain, release, autorelease et retainCount sont interdits • laissez ARC compter les références
    17. 17. Nouvelles règles• Plus de NSAutoreleasePool • NSString *string; @autoreleasepool { string = [self description]; } return string;
    18. 18. Nouvelles règles• pas de cast de id vers un autre type • ARC ignore comment sont gérés les autres types
    19. 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. 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. 21. Et les blocks - (dispatch_block_t)makeABlock { return ^{ [self performSomeTask]; }; }• Ça marche !
    22. 22. Est-ce plus lent ?• Non ! • nouveau autorelease pool • optimizations • objc_retain, objc_release • objc_autoreleaseReturnValue • objc_retainAutoreleasedReturnValue
    23. 23. Démo !

    ×