Objective c 如何创建动态命名的方法参数?

Objective c 如何创建动态命名的方法参数?,objective-c,methods,parameters,Objective C,Methods,Parameters,可能重复: 我在objective C中创建了一个如下所示的方法: - (void) startBuildingXArray: (NSMutableArray *) arrayName:(int) senderID; 但是,这里是棘手的部分。特定的arrayName参数取决于senderID是什么。具体而言,每个arrayName的末尾都有一个与此方法中的senderID匹配的数字(即array1、array2等)。是否有一种方法可以将整数作为参数动态添加到数组名称的末尾?还是一种完全不同的

可能重复:

我在objective C中创建了一个如下所示的方法:

- (void) startBuildingXArray: (NSMutableArray *) arrayName:(int) senderID;
但是,这里是棘手的部分。特定的arrayName参数取决于senderID是什么。具体而言,每个arrayName的末尾都有一个与此方法中的senderID匹配的数字(即array1、array2等)。是否有一种方法可以将整数作为参数动态添加到数组名称的末尾?还是一种完全不同的更好的方法来产生相同的结果

换句话说,我想创造的是这样一种情况:

- (void) startBuildingXArray: (NSMutableArray *) arrayName+(senderID):(int) senderID;

当然,这绝对不是有效的代码,我只是想演示一下我希望发生的事情。有人能提出任何解决方案吗?

您很幸运:Objective-C是一种动态语言,因此您可以在运行时创建选择器(方法名称),并向其添加相应的实现函数。假设您已经实现了这些方法(例如,从
startBuildingXArray:arrayName1:
…arrayName9:
等等),并且您正在寻找一种根据整数ID调用它们的方法:

- (void)callMethodWithParam:(NSMutableArray *)parm ID:(int)ident
{
    // get the selector name and the selector
    char zelektor[128];
    snprintf(zelektor, sizeof(zelektor), "startBuildingXArray:arrayName%d:", ident);
    SEL realSel = sel_getUid(zelektor);

    // Alternatively you can use Foundation as well:
    /*
    NSString *zelektor = [NSString stringWithFormat:@"startBuildingXArray:arrayName%d:", ident];
    SEL realSel = NSSelectorFromString(zelektor);
     */

    // Grab a function pointer to the implementation corresponding to the selector
    IMP imp = class_getInstanceMethod([self class], realSel);

    // and call the function pointer just obtained
    imp(self, realSel, parm, ident);
}
如果您想批量创建具有类似名称的方法,可以使用类似的方法,但可以使用
class\u addMethod()


然而,这是一个黑客。我建议您使用一个函数,并根据传入的整数标识符实现其任务。

您很幸运:Objective-C是一种动态语言,因此您可以在运行时创建选择器(方法名称),并向其添加相应的实现函数。假设您已经实现了这些方法(例如,从
startBuildingXArray:arrayName1:
…arrayName9:
等等),并且您正在寻找一种根据整数ID调用它们的方法:

- (void)callMethodWithParam:(NSMutableArray *)parm ID:(int)ident
{
    // get the selector name and the selector
    char zelektor[128];
    snprintf(zelektor, sizeof(zelektor), "startBuildingXArray:arrayName%d:", ident);
    SEL realSel = sel_getUid(zelektor);

    // Alternatively you can use Foundation as well:
    /*
    NSString *zelektor = [NSString stringWithFormat:@"startBuildingXArray:arrayName%d:", ident];
    SEL realSel = NSSelectorFromString(zelektor);
     */

    // Grab a function pointer to the implementation corresponding to the selector
    IMP imp = class_getInstanceMethod([self class], realSel);

    // and call the function pointer just obtained
    imp(self, realSel, parm, ident);
}
如果您想批量创建具有类似名称的方法,可以使用类似的方法,但可以使用
class\u addMethod()


然而,这是一个黑客。我建议您使用一个函数,并根据传入的整数标识符实现其任务。

可能重复的,如果senderID是一个参数,那么为什么还要将其作为方法名称的一部分?可能重复的,如果senderID是一个参数,那么为什么还要将其作为方法名称的一部分?