我在目标C中创建了一个方法,如下所示:
- (void) startBuildingXArray: (NSMutableArray *) arrayName:(int) senderID;
但是,这是棘手的部分。特定的arrayName参数取决于senderID是什么。具体来说,每个arrayName在其末尾都有一个数字(即array1,array2等),它与此方法中的senderID匹配。有没有办法动态地将一个整数添加到数组名称的末尾作为参数?或者是一种完全不同且更好的方法来产生相同的结果?
换句话说,我想要创造的是这种情况:
- (void) startBuildingXArray: (NSMutableArray *) arrayName+(senderID):(int) senderID;
当然,这不是任何有效的代码,我只是想证明我想要发生的事情。任何人都可以提出任何解决方案吗?
答案 0 :(得分:1)
您很幸运: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_addMethod()
Objective-C runtime function。
然而,这是一个黑客。我建议你使用一个函数并根据传入的整数标识符来实现它的任务。