Утечки памяти в Xcode 4.2 и iOS 5 - PullRequest
1 голос
/ 27 ноября 2011

Я использую xcode 4.2, и это использует ARC (Автоматический подсчет ссылок).


Это не утечка памяти, потому что ARC отправляет сообщение 'release':

NSNumber *xy = [[NSNumber alloc] init];

Но возможно создать утечки памяти с этим:

char *oldString = "Old String";
char newStrig = strdup(oldString);

Я хотел знать, что могут быть сделаны другие типы утечек памяти?(Если это возможно без использования C или C ++)

Ответы [ 2 ]

5 голосов
/ 27 ноября 2011

ARC относится только к управлению памятью Какао.Если вы выполняете приведение между Cocoa и CoreFoundation для бесплатных объектов-мостов, есть макросы для передачи управления памятью.

Вы можете утечь память в C, вы можете утечь память Core Foundation, и статический анализатор поможетс их поиском.

ARC полностью не устраняет управление памятью.Он устраняет необходимость управления памятью для объектов Какао и в некоторых случаях (поскольку он может оптимизировать некоторые вызовы retain release) более эффективен в управлении памятью, но вам все равно необходимо понимать управление памятью для объектов Core Foundation, идля памяти C.

Вам также необходимо понять управление памятью Какао, чтобы понять, когда использовать свойства strong, weak или copy и когда использовать Block_copy() и Block_release() для блоков.даже если блоки являются объектами Какао, и в большинстве случаев правильное управление памятью обрабатывается ARC.

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

3 голосов
/ 27 ноября 2011

ARC может работать только в том случае, если вы используете выделение памяти в Objective-C, поскольку оно связано исключительно с этим. Фактически, когда вы используете ARC, компилятор делает все возможное, чтобы сопоставить все ресурсы с выпуском (он даже не может этого гарантировать).

Если вы используете какие-либо другие средства, кроме распределения Objective-C, вы снова сами по себе. ARC не справится с этим.

...