Как правильно сохранить объект `Class` в` NSMutableArray`? - PullRequest
3 голосов
/ 28 марта 2011

Тип Class не является типом Objective-C.Так что хранение его в NSMutableArray выглядит требует особого внимания.Что такое правильный способ сделать это?

Ответы [ 3 ]

13 голосов
/ 23 июля 2011

Объекты класса похожи на другие объекты. Вы можете определенно хранить их в 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];
2 голосов
/ 28 марта 2011

Я не знаю «правильный путь», но вы не можете сохранить его как строку?

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

// Позже в вашем коде.

id yourObject = NSClassFromString([array objectAtIndex:0UL]);

Надеюсь, что это можетпомощь.

0 голосов
/ 28 марта 2011

Это, вероятно, медленнее. Чтобы быть уверенным, измерить это. Рекомендуется запустить его на устройстве, чтобы вы почувствовали это.

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...