2015-10-03 2 views
-3

Я только что осознал небольшую проблему в распределении памяти и освободил ненужные экземпляры.Проблема ARC со статическими объектами в памяти

У меня есть контроллер вида с двумя диспетчерскими очередями.

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 не получает освобождение в первом тесте?

+2

Вам нужно предоставить гораздо больше контекста и полезной информации. На данный момент слишком мало, чтобы помочь вам. – rmaddy

+0

В каком классе существует код в вашем примере? Если вы показываете этот маленький код, вам нужно объяснить контекст. – Caleb

ответ

1

Один или несколько блоков кода, которые вы отправляете в эти очереди, содержат сильную ссылку на контроллер вида. Это приводит к эталонному циклу, и в результате ваш контроллер просмотра никогда не будет освобожден.

+0

Да, не думал об этой возможности. Спасибо за подсказку. – Legolas