オブジェクト内に格納されている変数に基づいて並べ替える必要のあるNSArrayがあります(この場合、クラス名はUIViewControllerであるSchedViewです)。NSArrayで「メンバー関数」を渡せると思っていました(Objective-Cで使用されている用語かどうかはわかりませんが、この言語は初めてです)。ただし、静的/ Cスタイルの関数しか渡せないようです。そのため、最終的には次のようになりました。
- (NSInteger) BuildGridSortCompare :(id) r1 :(id) r2 :(void*) context
{
// Have compare code here, and can use class scope variables...
return NSOrderedSame;
}
NSInteger _BuildGridSortCompare(id r1,id r2,void *context)
{
SchedView *sv = (__bridge SchedView*) context;
return [sv BuildGridSortCompare:r1 :r2 :NULL];
}
- (void)BuildGrid
{
Records = [Records sortedArrayUsingFunction:_BuildGridSortCompare context:(__bridge void *)(self)];
}
BuildGridとBuildGridSortCompareは、私のSchedViewクラス(セレクター?)のメンバー関数です。_BuildGridSortCompareは基本的にCスタイルの関数であり、メンバー関数を呼び出すための単なるラッパーです。
私は以前にこのデザインをC/C ++コードで使用しましたが、JavaやC#などの最新のプラットフォームでは使用していなかったので、Objective-Cの方が良い方法かもしれないと思いましたか?
いくつかのタイプキャストについてもよくわかりませんが、ほとんどは__bridgeです。
私が行っていることは安全ですか、それともメンバー関数を使用できるようにするsortedArrayUsingFunctionに似た別の関数がありますか?私はsortedArrayUsingSelectorを見ましたが、それは私がソートしているクラスの関数を呼び出すようです。この場合、関数を自分で実装したいと思います。