【发布时间】:2012-07-05 19:21:35
【问题描述】:
我正在为 IOS 开发一个库,在某些时候需要创建一个 NSArray 的各种类的方法引用。到某个会在某个时候调用它们的单个类。
有什么办法吗?
谢谢
【问题讨论】:
标签: iphone ios ipad ios5 methods
我正在为 IOS 开发一个库,在某些时候需要创建一个 NSArray 的各种类的方法引用。到某个会在某个时候调用它们的单个类。
有什么办法吗?
谢谢
【问题讨论】:
标签: iphone ios ipad ios5 methods
您可以将选择器添加到您的array。你可以像这样创建一个选择器:
-(void)myMethod:(int)something
SEL selectorToMyMethod = @selector(myMethod:);
希望对你有帮助,干杯!
【讨论】:
NSString's,然后将它们转换为选择器...但我更喜欢NSInvocation 方式,我认为它更干净。
你有一些选择。您可以使用NSStrings 来实际命名您的方法,然后执行以下操作:
NSString *myMethodName = @"hellWorld";
SEL selector = selectorFromString(myMethodName);
然后您可以将您的选择器添加到您的NSArray。
您也可以使用NSInvocations 并存储方法并稍后定义目标:
一个 NSInvocation 对象包含一个 Objective-C 的所有元素 消息:目标、选择器、参数和返回值。每个 可以直接设置这些元素,并设置返回值 在调度 NSInvocation 对象时自动执行。
编辑 1(为了好玩):
- (Method *)getMethodsPointer{
unsigned int number = 0;
Method *myMethods = class_copyMethodList([self class], &number);
//for(int i=0;i<number;i++)
// {
// printf("%s",sel_getName(method_getName(myMethods[i])));
//}
return myMethods;
}
【讨论】:
您可以创建一些 NSInvocation,在其中存储选择器和目标类,然后将 NSInvocation 添加到数组中。
仅存储选择器是可能的,但前提是方法仅在一个类中 - 因为选择器独立于它们的类。
【讨论】:
forwardInvocation: 处理这个问题。这是一种创建多重继承的方式。