Quellcode
- #import
- #import
- @interface BaseObject : NSObject {
- int idx;
- }
- - (void)doSomeCrazyStuff;
- @property (readwrite) int idx;
- @end
- @implementation BaseObject
- @synthesize idx;
- - (void)doSomeCrazyStuff {
- //do some crazy stuff here!
- NSLog(@"doSomeCrazyStuff: %@ - %i", self, idx);
- }
- @end
- #define MAX_OBJECTS 10
- int main(int argc, char *argv[])
- {
- NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
- BaseObject *objects = (BaseObject*)calloc(MAX_OBJECTS, sizeof(BaseObject));
- mach_timebase_info_data_t info;
- mach_timebase_info(&info);
- double machTimerMillisMult = (double)info.numer / ((double)info.denom * 1000000.0);
- int i;
- uint64_t startTime;
- startTime = mach_absolute_time();
- for (i = 0; i < MAX_OBJECTS; i++) {
- BaseObject *obj = [[[BaseObject alloc] init] autorelease];
- obj.idx = i;
- objects[i] = *obj;
- }
- NSLog(@"alloc %f", (mach_absolute_time() - startTime) * machTimerMillisMult);
- SEL sel = @selector(doSomeCrazyStuff);
- IMP imp = [objects methodForSelector:sel];
- startTime = mach_absolute_time();
- for (i = 0; i < MAX_OBJECTS; i++) {
- BaseObject *obj = &objects[i];
- //[obj doSomeCrazyStuff];
- (*imp)(obj , sel);
- }
- NSLog(@"method %f", (mach_absolute_time() - startTime) * machTimerMillisMult);
- //[objects release];
- NSLog(@"%@", objects);
- free(objects);
- objects = nil;
- NSLog(@"%@", objects);
- [pool release];
- return 0;
- }
Hier hat sich jemand schon die Mühe gemacht.
memo.tv/nsarray_vs_c_array_performance_comparison
>>wirf in das array nur pointer rein und nicht die objekte an sich.
Wie?