iPhone:有没有办法循环NSObject的属性?

时间:2011-07-28 17:28:44

标签: iphone objective-c nsobject

我有一个NSObject定义如下:

@interface MFMoodMix : NSObject {
    NSNumber *m1;
    NSNumber *m2;
    NSNumber *m3;
    NSNumber *m4;
    NSNumber *m5;
    NSNumber *m6;
    NSNumber *m7;
}

有什么方法可以快速遍历所有这些值以找到最大值?例如就像UIView一样(UIView * x在view.subviews中),是否有类似的方法可以快速完成?

由于

3 个答案:

答案 0 :(得分:5)

没有。这是一个糟糕的设计。请改用NSNumbers数组。

@interface MFMoodMix : NSObject {
    NSArray *ms;
}

然后在你的init方法(或其他地方)中将数字添加到数组中:

-(id) init
{
    /* ... */
    ms = [[NSArray alloc] initWithObjects:
             [NSNumber ...],
             [NSNumber ...], nil];
    /* ... */
}

要进行迭代,只需考虑NSNumber的示例是int(s):

int high = 0; /* or a negative number... */
/* This is not Python */
for (NSNumber *n in ms)
    if ([n intValue] > high)
        high = [n intValue];

答案 1 :(得分:2)

如果您有一个类似值的集合,您需要以相同的方式访问它,我建议您只需将它们放入... collection。如果将这些值放入NSArray,您可以轻松地迭代它们并按照您喜欢的方式对它们进行排序。如果要保留m *前缀,可以替换NSDictionary并使用 m 值作为键。

答案 2 :(得分:1)

如果你以某种方式无法将你的数字转换为数组,你总是可以通过艰难的方式去做并使用objc运行时:-)

这里有一个很好的主题:Objective C Introspection/Reflection