- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我是 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 下执行此操作。上面的typecast部分是看例子构思出来的,但还是让我紧张。
我担心的一个问题是,如果我为“常规”对象分配空间,那么 dealloc
当变量超出范围时会被调用,这会在 free
之后发生叫做。但我不认为这正是这里发生的事情。
Class
行为与其他类型的 Objective-C 数据类型不同?我是否应该从中期待其他东西?classes
?我猜它引用了一个未知大小的数组(一个非对象指针),但 ARC 仍然关心它,因为如果没有该转换代码将无法编译。它看起来像一个强指针,但我不知道它会指向什么。dealloc
?编译器何时以及如何确保发生这种情况?classes
是否更好?至 NULL
, 然后才调用 free
?或者我应该遍历数组并对每个对象做一些事情,比如将它们设置为 nil
?最佳答案
您正在分配一个结构指针数组(Class == pointer to a struct),其中将填充指向注册到运行时的类的指针。只要您的应用程序运行,该指针就不会被释放/取消分配等。您没有分配任何类,而是分配空间来保存指向此类的指针。您的代码完全没问题,__unsafe_unretained
正是您想要的。它告诉 ARC 你持有一个指向你不拥有的对象的指针,因此防止它试图在你的变量范围结束时释放它。
关于ios - 带有 __unsafe_unretained 类型转换的 malloc 对象生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20046287/
我正在开发一个使用多个 turtle 的滚动游戏。玩家 turtle 根据按键命令在 Y 轴上移动。当危害和好处在 X 轴上移动时,然后循环并改变 Y 轴位置。我尝试定义一个名为 colliding(
我不明白为什么他们不接受这个作为解决方案,他们说这是一个错误的答案:- #include int main(void) { int val=0; printf("Input:- \n
我正在使用基于表单的身份验证。 我有一个注销链接,如下所示: 以及对应的注销方法: public String logout() { FacesContext.getCurren
在 IIS7 应用程序池中有一个设置 Idle-time out 默认是 20 分钟,其中说: Amount of time(in minutes) a worker process will rem
我是一名优秀的程序员,十分优秀!