В моем понимании, если включено ARC
, объекты внутри @autoreleasepool{}
должны быть выпущены, когда они больше не используются.Объектив C - память утечки autoreleasepool и ARC
Однако код
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
@autoreleasepool {
for (int i = 0; i < 1000000000; i++) {
NSString *string = @"ab c";
NSArray *array = [string componentsSeparatedByString:string];
}
}
return 0;
}
утечки памяти.
Приборы показывают, что утечка объектов будут __NSArrayM созданы - [NSString componentsSeparatedByString:]
Итак, вопрос: почему __NSArrayM объекты не уничтожаются в одной и той же итерации цикла они созданы?
Может ли мне помочь в решении этой проблемы
Обновление: Спасибо за ответы, мне кажется, я использовал термин «утечка памяти» неправильно, и непонятых хау @autoreleasepool{}
работы. Чтобы решить проблему, я должен был разместить @autoreleasepool{}
внутри цикла for.
Этот код выделяет много памяти, но не течет. – stosha
Если вы знаете, что это вызывает утечку, зачем делать такую большую петлю, чтобы доказать это, а не только одну итерацию? :) –
Я на самом деле думаю, что это очень хороший пример вопроса. Я не знаю, почему он собрал так много downvotes. –