实例化对象的方法

时间:2011-09-30 10:14:14

标签: objective-c

想要创建一个实例化对象的方法。

- (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 个答案:

答案 0 :(得分:2)

您不能使用变量(在您的情况下为type)...作为另一个变量的类型!

在您的代码中,typetemp都是变量,这是语法错误。

由于您不知道变量的类型为编译时间,请改用动态类型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];
}