Память и autoreleasepool для циклов

Шаблон autoreleasepool используется в Swift при возврате объектов autorelease (созданных либо вашим кодом Objective-C, либо использованием классов Cocoa). autorelease в Swift функционирует так же, как в Objective-C. Для примера можно рассмотреть метод создания объектов NSImage / UIImage:

Если запустить из Инструментов Activity Monitor, то можно увидеть график использования памяти:

Но если вы сделаете это без autoreleasepool, вы увидите, что пиковое использование памяти выше:

 

Autoreleasepool позволяет вам явно управлять освобождением памяти, когда объекты autorelease деинициализирутся в Swift, так же, как и в Objective-C.

Примечание. При работе с объектами Swift вы, как правило, не будете получать объекты autorelease. Вот почему в начале статьи упоминается оговорка о том, что это нужно только при «работе с Objective-C». Но если вы имеете дело с объектами Objective-C (включая классы Cocoa), они могут быть объектами autorelease, и в этом случае это Swift-представление шаблона Objective-C @autoreleasepool по-прежнему полезно.




Метки:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*