当前位置:  开发笔记 > IOS > 正文

如何在Objective-C中构建类方法的NSArray(或NSMutableArray)?

如何解决《如何在Objective-C中构建类方法的NSArray(或NSMutableArray)?》经验,为你挑选了2个好方法。



1> Andrew Grant..:

这里的问题是,要绑定这些函数,您必须使用返回SEL类型的selector关键字.这是指针类型,而NSArray存储对象.

你有三个选择;

    使用常规的C型数组

    将函数折叠到一个将调用它们的NSObject派生类中.

    使用协议.

第二个可能更好,为此您可以使用NSValue类来保存选择器结果.例如;

NSValue* selCommandA = [NSValue valueWithPointer:@selector(handleCommandA:)];
NSValue* selCommandB = [NSValue valueWithPointer:@selector(handleCommandB:)];

NSArray *handler_table = [NSArray arrayWithObjects:selCommandA, selCommandB, nil ];

当您从阵列中检索到正确的条目时,要转换回来,您会这样做;

SEL mySelector = [selCommand pointerValue];
[someObject performSelector:mySelector];

(注意我假设你的objective-c语法中的这些用作对象的方法,而不是全局函数.如果你想在全局使用它们,那么你应该像在C中那样编写它们.)

另一种选择是将命令方法形式化为协议.这允许您编写可以在任何实现该协议的对象上工作的功能,并且编译器将提供比您只是调用选择器更多的检查.

例如

// some header
@protocol CommandHandler
@required
-(void) handleCommandA;
-(void) handleCommandB;
@end

// some other header
@interface someClass : NSObject
{
// you will receive compiler warnings if you do not implement the protocol functions
}

然后编写处理和调度代码以使用"CommandHandler"类型的对象.例如

-(void) registerForCommands:(CommandHandler*)handler



2> terry frangu..:

使用NSValue.

例如:

NSArray* handlers = [NSArray arrayWithObjects:[NSValue valueWithPointer:handleA] ... ];

然后访问:

handleptr* handle = (handlerptr*)[[handlers objectAtIndex:0] pointerValue];
handle(foo_bar);

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有