Class
类型不是Objective-C类型,所以将其存储到NSMutableArray
中需要特别小心。那么这应该采用正确的方式呢?
Class
类型不是Objective-C类型,所以将其存储到NSMutableArray
中需要特别小心。那么这应该采用正确的方式呢?
类对象就和其他对象一样。你可以把它们存储在NSMutableArray
中,或者像处理其他对象一样对它们进行操作(例如调用根类NSObject
的方法,比如description
和performSelector...
等)。请注意,类型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];
我不知道“正确的方法”,但你不能将它存储为字符串吗?
NSMutableArray *array = [[NSMutableArray alloc] init];
[array addObject:NSStringFromClass([yourObject class])];
[array addObject:NSStringFromClass([anotherObject class])];
id yourObject = NSClassFromString([array objectAtIndex:0UL]);
可能会慢一些。为了确保,请进行测量。建议在设备上运行,这样您就可以感受到它。
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);