如何分配动态类型对象

时间:2009-02-26 05:37:48

标签: objective-c dynamic allocation

我在objective-c中看到了很多关于动态类型的讨论。但我还没有看到任何我认为应该是的例子。

假设我有一个泛型函数,它应该兼顾两个对象(一个被分配,另一个被释放),并且调用对象将它自己附加到新分配的对象。两者都继承自class0

如果您认为可以解释某些事情,请随意解释这个!

如果在运行时选择了类,我该如何处理参数列表(?现在是占位符) 如何在运行时之前分配一个没有定义类的对象?

-(void) juggle:(?*)objclass1:(?*)objclass2{

? temp = [? alloc] init];
objclass1 = temp;
[temp release];

[objclass2.view removefromsuperview];
[self.handle insertsubview:objclass1.view];

}

2 个答案:

答案 0 :(得分:19)

我不知道你在那里尝试的代码是什么,它在语法上是无效的,操纵视图与你的问题无关。无论如何,如果你真的不知道这种类型,你通常会使用“id”,这种类型转换为代码生成的“void *”。它具有特殊属性,假定它接收任何消息,因此它不会触发未知消息的编译器警告。

为了实例化一个类,你只需要为它保存“Class”对象。在Objective C中,类的所有实例都引用一个Class对象(遗留运行时中的isa指针),它也响应方法。换句话说,在以下代码中:

NSArray *myObject = [[NSArray alloc] init];

NSArray实际上是一个对象。因此,这将生成等效的代码结果:

Class myClass = [NSArray class];
NSArray *myObject = [[myClass alloc] init];

甚至

Class myClass = NSClassFromString(@"NSArray");
NSArray *myObject = [[myClass alloc] init];

使用NSClassFromString函数进入运行时并找到一个具有您传入名称的类。

如果使用类getter,所有对象都返回它们的类,所以要实例化一个与现有对象相同的类的对象,如下所示:

- (void) leakObjectWithSameClassAs:(id)object {
    [[[object class] alloc] init];
}

答案 1 :(得分:0)

这就是我现在所拥有的

- (void)flipfromv1tov2:(UIViewController*)v1:(NSString*)nib1:(UIViewController*)v2{

    if(v1 == nil)
    {
        UIViewController *newview = [[[v1 class] alloc] initWithNibName:nib1 bundle:nil];
        v1 = newview;
        [newview release];
    }
    [v2.view removeFromSuperview];
    [self.view insertSubview:v1.view atIndex:0];    
}

我还无法验证它,因为我有一个链接问题...我将这个func添加到我的根控制器但是由于某种原因我得到一个警告,该函数是隐式声明的。并且构建失败,因为函数调用永远不会链接到任何