我有一个 NSArray,我需要根据存储在对象内的变量进行排序(在这种情况下,我的类名是 SchedView,它是一个 UIViewController)。我在想 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,但这似乎在我正在排序的类上调用了一个函数。在这种情况下,我希望该功能由自己实现。