消息送信:
//
// main.m
// Test
//
// Created by zhen7216 on 2017/3/7.
// Copyright © 2017年 chenzhen. All rights reserved.
//
#import <Foundation/NSObject.h>
#import <Foundation/Foundation.h>
#import <stdio.h>
#define TICK NSDate *startTime = [NSDate date]
#define TOCK NSLog(@"Time: %f", -[startTime timeIntervalSinceNow])
#if !defined(LOOP)
# define LOOP 3000
#endif
unsigned long rnd = 201109;
@interface testObj : NSObject
- (int)testMethod;
@end
@implementation testObj
- (int)testMethod {
rnd = rnd * 1103515245UL + 12345;
return (rnd & 1) ? 1 : -1;
}
@end
int main(void)
{
id obj = [[testObj alloc] init];
int v = [obj testMethod];
TICK;
for (int i = 0; i < LOOP; i++)
for (int j = 0; j < 20000; j++)
v += [obj testMethod];
TOCK;
return (v == 0);
}
使用performSelector:
//
// main.m
// Test
//
// Created by zhen7216 on 2017/3/7.
// Copyright © 2017年 chenzhen. All rights reserved.
//
#import <Foundation/NSObject.h>
#import <Foundation/Foundation.h>
#import <stdio.h>
#define TICK NSDate *startTime = [NSDate date]
#define TOCK NSLog(@"Time: %f", -[startTime timeIntervalSinceNow])
#if !defined(LOOP)
# define LOOP 3000
#endif
unsigned long rnd = 201109;
@interface testObj : NSObject
- (int)testMethod;
@end
@implementation testObj
- (int)testMethod {
rnd = rnd * 1103515245UL + 12345;
return (rnd & 1) ? 1 : -1;
}
@end
int main(void)
{
id obj = [[testObj alloc] init];
int v = [obj testMethod];
TICK;
for (int i = 0; i < LOOP; i++)
for (int j = 0; j < 20000; j++)
v += (int)[obj performSelector:@selector(testMethod)];
TOCK;
return (v == 0);
}
函数调用的形式:
//
// main.m
// Test
//
// Created by zhen7216 on 2017/3/7.
// Copyright © 2017年 chenzhen. All rights reserved.
//
#import <Foundation/NSObject.h>
#import <Foundation/Foundation.h>
#import <stdio.h>
#define TICK NSDate *startTime = [NSDate date]
#define TOCK NSLog(@"Time: %f", -[startTime timeIntervalSinceNow])
#if !defined(LOOP)
# define LOOP 3000
#endif
unsigned long rnd = 201109;
@interface testObj : NSObject
- (int)testMethod;
@end
@implementation testObj
- (int)testMethod {
rnd = rnd * 1103515245UL + 12345;
return (rnd & 1) ? 1 : -1;
}
@end
int main(void)
{
int (*f) (id, SEL);
id obj = [[testObj alloc] init];
int v = [obj testMethod];
f = (int (*) (id, SEL)) [obj methodForSelector:@selector(testMethod)];
TICK;
for (int i = 0; i < LOOP; i++)
for (int j = 0; j < 20000; j++)
v += (*f)(obj, @selector(testMethod));
TOCK;
return (v == 0);
}