gpt4 book ai didi

objective-c - 如何分配动态类型对象

转载 作者:太空狗 更新时间:2023-10-30 03:35:09 26 4
gpt4 key购买 nike

我看过很多关于 Objective-C 中的动态类型的讨论。但我还没有看到任何我认为它应该是什么的例子。

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

如果您认为它会解释某些事情,请随意解释它!

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

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

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

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

}

最佳答案

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

为了实例化一个类,您只需要为它保存“类”对象。在 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];
}

关于objective-c - 如何分配动态类型对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/589240/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com