Objective-C在运行时将参数修改为方法

时间:2009-08-15 02:31:10

标签: objective-c cocoa cocoa-touch

我想在运行时更改参数的值,并且好奇它在Obj-C中是如何工作的。

我有一个循环,其中'n'的值为0,每个循环增加1。当n移动时,如何将传递的参数递增1。

UIViewSubclass *uiViewSubclass = [[UIViewSubclass alloc] initWithValue:([value integerValue]) 
                                                   andPlacement:kPlacement0;

下次循环我想读第二个参数: andPlacement:kPlacement1 ; 然后: andPlacement:kPlacement2 ;并在......

我将kPlacement设为字符串而stringByAppendingString:[[NSNumber numberWithInt:n] stringValue]; ?

什么是Obj-C / Cocoa方法?

1 个答案:

答案 0 :(得分:3)

您无法在运行时修改源代码或组成变量引用。 Objective-C不是 动态。

如果kPlacement0kPlacementMax的值是连续的,您可以使用for循环直接逐步执行它们:

for (MyPlacement placement = kPlacement0; placement += kPlacementIncrement; placement <= kPlacementMax) {
    UIViewSubclass *instanceOfUIViewSubclass = [[UIViewSubclass alloc] initWithValue:([value integerValue])
                                                                        andPlacement:placement];
    //Do something with instanceOfUIViewSubclass.
    [instanceOfUIViewSubclass release];
}

(除了kPlacementIncrement等常量之外,您还需要定义kPlacementMaxkPlacement0。我使用MyPlacement作为枚举类型的名称kPlacement0等常量对应于。)

如果它们不是顺序的,则将它们放在C数组中并迭代该数组:

enum { numPlacements = <#Insert the number of placement constants here#> };
MyPlacement placements[numPlacements] = {
    kPlacement0,
    kPlacement1,
    kPlacement2,
    ⋮
}

for (unsigned i = 0U; i < numPlacements; ++i) {
    UIViewSubclass *instanceOfUIViewSubclass = [[UIViewSubclass alloc] initWithValue:([value integerValue])
                                                                        andPlacement:placements[i]];
    //Do something with instanceOfUIViewSubclass.
    [instanceOfUIViewSubclass release];
}

您可能会提出比kPlacement0等更具描述性的名称。当您想按编号引用它们时,请执行此操作;当你想通过名字引用它们时,给它们起个好名字。