Si vous avez besoin des fois ( a des fins de debugging par exemple) de savoir quels sont les messages envoyés par vos objets et dans quels ordre tourner vous alors vers : instrumentObjcMessageSends, cette fonction permet de tracer les messages echangés le resultat de ce tracage est generé apres l’execution du programme dans /tmp/msgSends-<PID de votre programme>
Voici un exemple de l’utilisation de cette fonction :
#import <Foundation/Foundation.h> int main (int argc, char **argv) { /* Begin Tracing ObjC Messages */ instrumentObjcMessageSends(YES); NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSLog(@"Hello, lostinmac.com!"); [pool drain]; instrumentObjcMessageSends(NO); /* End of Tracing */ return 0; }
après la compilation et l’exécution de ce code :
MyMac:Desktop Tarek$ gcc -framework Foundation tracingObjcMessages.m -o tracingObjcMessages MyMac:Desktop Tarek$ ./tracingObjcMessages 2011-03-01 21:28:14.989 tracingObjcMessages[8496:903] Hello, lostinmac.com!
Un fichier de trace est alors généré (msgSends-8496 par exemple ) et dans lequel on trouve tous les messages envoyés:
+ NSAutoreleasePool NSObject initialize + NSAutoreleasePool NSObject alloc + NSObject NSObject allocWithZone: - NSAutoreleasePool NSAutoreleasePool init + NSTimeZone NSObject initialize + NSTimeZone NSTimeZone defaultTimeZone + NSTimeZone NSTimeZone systemTimeZone + NSTimeZone NSTimeZone timeZoneWithName: + __NSPlaceholderTimeZone __NSPlaceholderTimeZone initialize + __NSPlaceholderTimeZone NSObject alloc + __NSPlaceholderTimeZone NSTimeZone allocWithZone: + NSObject NSObject allocWithZone: + __NSPlaceholderTimeZone __NSPlaceholderTimeZone immutablePlaceholder - __NSPlaceholderTimeZone __NSPlaceholderTimeZone initWithName: - __NSPlaceholderTimeZone __NSPlaceholderTimeZone __initWithName:cache: + __NSCFTimeZone __NSCFTimeZone initialize + NSCache NSObject initialize + NSCache NSObject new - NSCache NSCache init - NSCache NSCache setName: + __NSCFTimeZone __NSCFTimeZone __new:cache: - NSCache NSCache evictsObjectsWithDiscardedContent - NSCache NSCache setObject:forKey: - NSCache NSCache setObject:forKey:cost: - __NSCFTimeZone NSObject retain - __NSCFTimeZone NSObject retain - __NSCFTimeZone NSObject release - __NSCFTimeZone __NSCFTimeZone name + __NSPlaceholderDate __NSPlaceholderDate immutablePlaceholder - __NSPlaceholderDate __NSPlaceholderDate initWithTimeIntervalSinceReferenceDate: + __NSCFDate __NSCFDate __new: + NSTimeZone NSTimeZone systemTimeZone - __NSCFTimeZone NSObject retain - __NSCFTimeZone NSObject release - __NSCFTimeZone NSObject release - __NSCFDate NSObject release - __NSCFDate __NSCFDate dealloc - NSDate NSObject dealloc - NSAutoreleasePool NSAutoreleasePool drain