Дорого ли выделять init внутри цикла for в Objective C? - PullRequest
0 голосов
/ 03 мая 2018

Просто вопрос, который у меня возник по поводу общего программирования.

Я мог бы пойти на любой из вариантов:

for(some_conditions)
{
 NSFileManager * fm = [[NSFileManager alloc] init];
 BOOL result = [fm moveItemAtPath:x toPath:y error:&err];
}

Или я мог бы пойти на:

NSFileManager * fm = [[NSFileManager alloc] init];
for(some_conditions)
{
 BOOL result = [fm moveItemAtPath:x toPath:y error:&err];
}

Что я хочу знать, есть ли какие-либо вычислительные различия между ними в отношении времени и пространства, используемых для выполнения двух опций? Большое спасибо заранее :) 1009 *

1 Ответ

0 голосов
/ 03 мая 2018

Если вы не планируете использовать NSFileManagerDelegate, рассмотрите возможность использования defaultManager:

NSFileManager *fm = NSFileManager.defaultManager;

Мало того, что он инициализируется один раз, но вы можете представить, что он может содержать некоторые внутренние кеши в памяти для ускорения определенных операций.

Если вас интересует производительность, вы должны добавить (и распечатать) время к своему коду и попробовать его с реальными данными. Я предполагаю, что здесь время до alloc/init ничтожно мало по сравнению с moveItemAtPath.

Распределение пространства можно проверить в инструменте выделения Xcode или на графике отладочной памяти. Я предполагаю, что это то же самое для обоих, потому что в первом варианте fm уничтожается в конце каждой итерации цикла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...