开发者

Method to instantiate objects

开发者 https://www.devze.com 2023-04-09 07:00 出处:网络
Would like to create a method that instantiateobjects.  - (NSArray *) make3Of : (Class) type { ... type * temp = [[type alloc] ...

Would like to create a method that instantiate objects. 

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

But I get a warning from Xcode ...

Actual warning: "Class method +alloc not found (return type defaults to 'id')"

Is there a better/correct way to do this?

Actual code:

- (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.

            ...

        }
    }
}

Same as example, I'm trying to instantiate a couple of objects.

Code for protocol:

#import <Foundation/Foundation.h>

@protocol ConcreteBox

+ (NSString *) typecode;

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

@end


You can't use a variable (in your case type)... as a type for another variable!

In your code, both type and temp are variables, that's a syntax error.

As you don't know the type of the variable as compile time, use the dynamic type id instead. This type is specifically designed to handle cases when the type is not defined at compile time.

So your code will look like this:

-(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];
}
0

精彩评论

暂无评论...
验证码 换一张
取 消