Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #import <UIKit/UIKit.h>
- @interface SimpleClass : NSObject
- @property (assign, readwrite) float value;
- @end
- @implementation SimpleClass
- @end
- @interface ComplexClass : NSObject
- @property (strong, nonatomic) NSString *firstName;
- @property (strong, nonatomic) NSString *lastName;
- @property (assign, readwrite) float value;
- @property (strong, nonatomic) NSArray *arr;
- @end
- @implementation ComplexClass
- @end
- @interface TimingViewController : UIViewController
- @property (strong, nonatomic) NSMutableArray *simpleArray;
- @property (strong, nonatomic) NSMutableArray *complexArray;
- @end
- @implementation TimingViewController
- int numElements = 1000;
- int numReps = 50;
- - (void)viewDidLoad {
- [super viewDidLoad];
- self.view.backgroundColor = [UIColor systemYellowColor];
- _simpleArray = [NSMutableArray new];
- _complexArray = [NSMutableArray new];
- srand48(time(0));
- for (int i = 0; i < numElements; i++) {
- float r = drand48();
- SimpleClass *sc = [SimpleClass new];
- sc.value = r;
- [_simpleArray addObject:sc];
- ComplexClass *cc = [ComplexClass new];
- cc.value = r;
- cc.firstName = [NSString stringWithFormat:@"First %i", i];
- cc.lastName = [NSString stringWithFormat:@"Last %i", i];
- NSMutableArray *a = [NSMutableArray new];
- for (int j = 0; j < 1000; j++) {
- [a addObject:[NSNumber numberWithInt:j]];
- }
- cc.arr = [a mutableCopy];
- [_complexArray addObject:cc];
- }
- }
- - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
- double d = 0;
- NSLog(@"Sorting %d element array of Simple Objects %d times...", numElements, numReps);
- NSMutableArray *a = [NSMutableArray new];
- for (int j = 0; j < numReps; j++) {
- d = [self timingTest:_simpleArray];
- [a addObject:[NSNumber numberWithDouble:d]];
- }
- NSLog(@"Sorting %d element array of Complex Objects %d times...", numElements, numReps);
- NSMutableArray *b = [NSMutableArray new];
- for (int j = 0; j < numReps; j++) {
- d = [self timingTest:_complexArray];
- [b addObject:[NSNumber numberWithDouble:d]];
- }
- NSNumber *aAvg = [a valueForKeyPath:@"@avg.self"];
- NSNumber *bAvg = [b valueForKeyPath:@"@avg.self"];
- NSLog(@"Average Seconds for Simple: %0.10f", [aAvg doubleValue]);
- NSLog(@"Average Seconds for Complex: %0.10f", [bAvg doubleValue]);
- }
- - (double)timingTest: (NSMutableArray *)a {
- CFTimeInterval startTime;
- CFTimeInterval endTime;
- NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"value" ascending:YES];
- startTime = CACurrentMediaTime();
- NSArray *aa = [a sortedArrayUsingDescriptors:@[sortDescriptor]];
- endTime = CACurrentMediaTime();
- return endTime - startTime;
- }
- @end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement