如何正确地将`Class`对象存储到`NSMutableArray`中?

3

Class类型不是Objective-C类型,所以将其存储到NSMutableArray中需要特别小心。那么这应该采用正确的方式呢?

3个回答

13

类对象就和其他对象一样。你可以把它们存储在NSMutableArray中,或者像处理其他对象一样对它们进行操作(例如调用根类NSObject的方法,比如descriptionperformSelector...等)。请注意,类型Class是指向类对象的指针的通用类型,就像类型id是指向对象的指针的通用类型一样。因此,类型为Class的值也可以作为id传递。


NSMutableArray *array = [[NSMutableArray alloc] init];
[array addObject:[yourObject class]];
[array addObject:[anotherObject class]];

//Later in your code.

Class yourObject = [array objectAtIndex:0UL];

2

我不知道“正确的方法”,但你不能将它存储为字符串吗?

NSMutableArray *array = [[NSMutableArray alloc] init];
[array addObject:NSStringFromClass([yourObject class])];
[array addObject:NSStringFromClass([anotherObject class])];

//在代码后面。
id yourObject = NSClassFromString([array objectAtIndex:0UL]);

希望这能有所帮助。

1
嗯,这看起来是一种很常规和可靠的方法。但它似乎也非常低效。你知道吗,有关其性能方面的考虑吗? - eonil

-2

可能会慢一些。为了确保,请进行测量。建议在设备上运行,这样您就可以感受到它。

CFAbsoluteTime elapsedTime, startTime = CFAbsoluteTimeGetCurrent(); 
for (id object in array) {
    if ([object isKindOfClass:[NSString class]])
    id myObject = NSClassFromString(object);
    //Do something with your object.
}
elapsedTime = CFAbsoluteTimeGetCurrent() - startTime;
NSLog(@"time in seconds: %f", elapsedTime);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接