Это может быть глупый вопрос, но я борюсь с некоторым нечетным увеличением памяти в цикле. Поэтому я думал, что у меня может возникнуть проблема с ARC.Управление памятью iOS ARC
Скажет, у меня есть функция, как это:
+(NSString *)getDocPathToFile:(NSString *)filename{
NSFileManager *fileManager = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:fn];
return path;
}
Теперь, что происходит с экземплярами переменными, как FileManager, тракты, documentsDirectory и путь? Уничтожаются ли они после возвращения значения и, таким образом, не занимают памяти?
Чтобы объяснить это немного дальше: я вызываю этот метод пару раз в цикле. Теперь, в инструментах, я вижу постоянное увеличение памяти в CFString (immutable)
, но я не могу отслеживать, где находится этот CFString (я не использую какие-либо материалы CoreFoundation, насколько мне известно). Я не уверен, что данная функция является ли преступник, может быть что-то совершенно разные ...
Спасибо за просветить меня ...;)
Ваши переменные на самом деле являются слабыми. После окончания этой функции ARC освободится. Сама функция создаст новый экземпляр NSString, который вы собираетесь назначить переменной. Память останется сохраненной до тех пор, пока ничего больше не будет указано на эту новую строку. – Astri
Отлично, спасибо за разъяснение ... – Swissdude