我刚刚意识到内存分配中的一个小问题,并释放了不必要的实例。
所以我有一个带有两个调度队列的视图控制器。
static dispatch_queue_t _queue_1;
static dispatch_queue_t _queue_2;
@interface
...
@end
!!视图控制器永远不会被释放。
但是,如果它们不是静态的,并且是该视图控制器类的一部分,则会调用dealloc
。
dispatch_queue_t _queue_1;
dispatch_queue_t _queue_2;
这让我感到困惑,因为我并不认为静态变量可以提升它的保留计数?我的意思是 - 它在整个应用程序生命周期中作为静态变量存在。但为什么这与VC级别捆绑在一起呢?为什么VC在第一次测试中没有被解除分配?
答案 0 :(得分:1)
您要分配给这些队列的一个或多个代码块包含对视图控制器的强引用。这会导致引用周期,因此您的视图控制器永远不会被释放。