Создание подклассов. Классы коллекции не так уж и сложны - если вы используете крошечный трюк (см. Также: cocoawithlove ).
Подкласс - это отношение "есть" в объекте-ориентированный дизайн.Но есть также отношения «есть», то есть оболочки.
Если бы вы попытались создать подкласс NSArray, используя чистое отношение is-a, я думаю, это было бы довольно сложно, так каквам придется управлять памятью на уровне C.
Но если вы добавите отношение has-a - или: создадите обёртку - в то же время, вы можете легко выполнить подкассировку: просто создайте свой собственный массивкласс есть член регулярного NSArray.Теперь переопределите его метод путем переадресации вызовов на объект-член.Я показал это в этом посте, где я просто добавляю объекты, которые проходят определенный тест .
Но вы увидите, что я не реализовал методВы говорили правильно, но я поднимаю ошибку.Причина в том, что этот метод - это метод с переменным числом аргументов, в котором есть переменное число объектов, которые вы можете передать, и чтобы справиться с этим, вам нужно немного поработать. У cocoawithlove есть отличная статья об этом.
Для вас - если использовать этот трюк - это может выглядеть как
- (id) initWithObjects:(id)firstObj, ... {
if (self = [super init]) {
_realArray = [[NSMutableArray alloc] initWithCapacity:1];
}
va_list args;
va_start(args, firstObj);
for (id obj = firstObj; obj != nil; obj = va_arg(args, id))
{
[self.realArray addObject:obj];
}
va_end(args);
return self;
}