Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Code in this article:
- // https://it.toolbox.com/blogs/hohlecow/bypassing-objective-cs-message-passing-mechanism-for-speed-052708
- #import <Cocoa/Cocoa.h>
- @interface Fib : NSObject {
- }
- - (long long) messageFib: (NSUInteger) number;
- - (long long) impFib: (NSUInteger) number;
- - (long long) cFib: (NSUInteger) number;
- @end
- @implementation Fib
- // message passing implementation of fib
- - (long long) messageFib: (NSUInteger) number {
- return (number < 3) ? 1 : [self messageFib: number - 1] + [self messageFib: number - 2];
- }
- // imp implementation of fib
- - (long long) impFib: (NSUInteger) number {
- static long long (*impFibIMP)(id, SEL, NSUInteger) = nil;
- if (!impFibIMP) {
- impFibIMP = (long long (*)(id, SEL, NSUInteger)) [self methodForSelector: _cmd];
- }
- return (number < 3) ? 1 : impFibIMP(self, _cmd, number - 1) + impFibIMP(self, _cmd, number - 2);
- }
- // c implementation of fib
- long long cFib(NSUInteger number) {
- return (number < 3) ? 1 : cFib(number - 1) + cFib(number - 2);
- }
- // method wrapper for c implementation of fib
- - (long long) cFib: (NSUInteger) number {
- return cFib(number);
- }
- @end
Advertisement