プログラマメモ2 - programmer no memo2

sortUsingComparatorはNSComparatorでソートするのさ 2010/07/03

Objective-Cです。Blocksです。
iPhone3.2とiPhone4のAPIの比較をながめていて、sortUsingComparatorがあったのでまずは練習


- (void)sortUsingComparator:(NSComparator)cmptr


なんかBlocksってかっこいいと思ってしまうのは何故だろう。。。

コンパイルはこれでやってます。
gcc main.m -framework Foundation


forでくるくるまわして出力しているけど、ここはきっとenumerateObjectsUsingBlockを使って出力するべきところだね。きっと。

#import <Foundation/NSArray.h>
#import <Foundation/NSObject.h>
#import <Foundation/NSString.h>
#import <Foundation/NSAutoreleasePool.h>

// NSMutableArrayだよ!!
static NSMutableArray* array;
@interface MyData : NSObject {
NSString* name;
}
@property (nonatomic, retain) NSString* name;
@end

@implementation MyData
@synthesize name;
@end

int main(){

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];


{
// データつくる

array = [[NSMutableArray alloc] init];
int i = 0;
for (i=0; i<5; i++) {
MyData* mydata = [[MyData alloc]init];
mydata.name = [NSString stringWithFormat:@"aaaa%d",i];
[array addObject:mydata];
}
}

// 中身の確認
for (id a in array) {
NSLog(@"==>%@", [a name]);
}

// BLOCKで使ってソート!!
[array sortUsingComparator:^(id obj1, id obj2) {
NSLog(@"[%@]と[%@]を比較", [obj1 name], [obj2 name]);
return [[obj2 name] compare:[obj1 name]];
}];

// 中身の確認(ソート後の確認)
for (id a in array) {
NSLog(@"==>%@", [a name]);
}

// // BLOCKで使ってソート(はじめと同じ並びにするよ)!!
[array sortUsingComparator:^(id obj1, id obj2) {
NSLog(@"[%@]と[%@]を比較", [obj1 name], [obj2 name]);
return [[obj1 name] compare:[obj2 name]];

}];

// 中身の確認
for (id a in array) {
NSLog(@"==>%@", [a name]);
}

[pool drain];
return 0;
}


参考


よくわかってないが参考2

: