我是 Objective-C 和 ARC 的新手,并且已经搜索和阅读了几个小时而没有找到答案。代码做了我想让它做的事情,但我想知道它不依赖于有利条件。这是我的代码的简化版本:
+(void)foo {
Class *classes = (__unsafe_unretained Class *)malloc(sizeof(Class) * someValue);
// Perform work without complicated memory management
free(classes);
}
我对分配的结构无能为力。它由objc_getClassList填充。不幸的是,Apple 似乎没有更新他们的文档来解释如何在 ARC 下执行此操作。上面的类型转换部分是通过查看示例来构思的,但它仍然让我感到紧张。
我担心的一个问题是,如果我为“常规”对象分配空间,那么dealloc
当变量超出范围时就会被调用,这会在free
调用之后发生。但我不认为这正是这里发生的事情。
- 行为是否
Class
与其他种类的 Objective-C 数据类型不同?我应该期待别的东西吗? - 什么样的指针是
classes
?我猜它引用了一个未知大小的数组(一个非对象指针),但 ARC 仍然关心它,因为没有该强制转换代码将无法编译。它看起来像一个强指针,但我不知道它会是一个强指针。 - 是否存在指向数组中对象的强指针,或者对象本身是否是强指针?如果没有,ARC 是否仍然有效,或者我应该恢复到某些 MRC 约定?
- 会有自动呼叫
dealloc
吗?编译器何时以及如何确保这种情况发生? classes
设置为更好的做法NULL
,然后才调用到free
?或者我应该遍历数组并对每个对象做一些事情,比如将它们设置为nil
?