Más contenido relacionado CocoaHeads Lyon 17/12/2011 : Arc2. 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
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
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;
17. Nouvelles règles
• Plus de NSAutoreleasePool
• NSString *string;
@autoreleasepool {
string = [self description];
}
return string;
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 del editor \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n