Метод создания объектов - PullRequest
0 голосов
/ 30 сентября 2011

Хотелось бы создать метод, который создает экземпляры объектов.

- (NSArray *) make3Of : (Class) type
{
    ...
    type * temp = [[type alloc] ...
    ...
}

Но я получаю предупреждение от Xcode ...

Фактическое предупреждение: "Метод класса + alloc не найден (тип возвращаемого значения по умолчанию равен 'id')"

Есть ли лучший / правильный способ сделать это?

Фактический код:

- (NSArray *) getBoxesOfType: (Class <ConcreteBox>) type StartingFrom: (uint64_t) offset
{
    NSMutableArray *valueArray = [[NSMutableArray alloc]initWithObjects: nil];

    for (uint64_t i = offset; i< boxStartFileOffset + self.size; i += [self read_U32_AtBoxOffset:i]) 
    {
        if ([[self read_String_OfLen:4 AtBoxOffset:offset + 4] isEqual:[type typecode]]) {

            [[type alloc]initWithFile:file withStartOffset:i]; //warning here; 

            //yes I plan to assign it to a variable 
            //(originally of "type" but that won't work as AliSoftware pointed out, will be using "id" instead.

            ...

        }
    }
}

Так же, как в примере, я пытаюсь создать пару объектов.

Код для протокола:

#import <Foundation/Foundation.h>

@protocol ConcreteBox

+ (NSString *) typecode;

- (id) initWithFile: (NSFileHandle *) aFile withStartOffset: (uint64_t) theOffset;

@end

1 Ответ

2 голосов
/ 30 сентября 2011

Вы не можете использовать переменную (в вашем случае type) ... как тип для другой переменной!

В вашем коде и type, и temp являются переменными, этосинтаксическая ошибка.

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

Таким образом, ваш код будет выглядеть следующим образом:

-(NSArray*)make3Of:(Class)type {
  id obj1 = [[[type alloc] init] autorelease];
  id obj2 = [[[type alloc] init] autorelease];
  id obj3 = [[[type alloc] init] autorelease];
  return [NSArray arrayWithObjects:obj1, obj2, obj3, nil];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...