想要创建一个实例化对象的方法。
- (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
答案 0 :(得分:2)
您不能使用变量(在您的情况下为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];
}