Приложение iOS: завершено из-за проблемы с памятью [Связано с swiftSlowAlloc или UIImage]

В настоящее время я столкнулся с проблемой проблемы с памятью при создании приложения iOS. Я проверил утечку памяти с помощью инструментов. Я обнаружил, что есть один вид утечек, который продолжает появляться с именем swift_slowAlloc, о котором у меня нет. Ниже приведен фрагмент ошибки.

Утечки памяти

Другая причина, по которой я думаю, может произойти, связана с загрузкой нескольких UIImages в моем приложении. Просто для того, чтобы предоставить фон, я беру различные части исходного изображения в своем приложении и обрабатываю их. Однако мне не нужно сохранять изображения для дальнейших вычислений. Я использовал autoreleasepool для выпуска UIImage; но я сомневаюсь, что он работает. Пример приведен ниже:

   @autoreleasepool {

        UIImage *imageResized = MatToUIImage(resized28);

        // MARK: Send resized28 to CNN and get the output. Fill the dict then

        NSString *CNNScore;
        CNNScore = [myclass CNNfloat:imageResized W1:W1 W2:W2 Wf1:Wf1 Wf2:Wf2 B1:B1 B2:B2 Bf1:Bf1 Bf2:Bf2];

        imageResized = nil;
        xtn = [NSNumber numberWithInteger:xt];
        xbn = [NSNumber numberWithInteger:xb];
        ytn = [NSNumber numberWithInteger:yt];
        ybn = [NSNumber numberWithInteger:yb];

        symbol = [NSString stringWithFormat:@"%@", CNNScore];
        symtype = [NSString stringWithFormat:@"%@", [scoreDic objectForKey: symbol]];

        numberInDict = [NSString stringWithFormat:@"%i", n];


        inToMaroof = [NSArray arrayWithObjects: xtn, xbn, ytn, ybn, symbol,symtype, nil];

        [toMaroof setObject: inToMaroof
                     forKey: numberInDict];
        }
    }

Может кто-нибудь предложить что-нибудь по этой проблеме?

Ответ 1

Это некоторые возможные причины, которые могут вызвать утечку памяти в вашей программе, даже если вы используете ARC:

  • Вы устанавливаете сильную ссылку на родителя в дочернем объекте. Это вызывает цикл сохранения.
  • Вы устанавливаете сильную ссылку на делегат в интерфейсе.
  • Вы забыли освободить объект, когда вы делаете бесплатный мост после передачи права собственности.
  • Вы забыли установить слабую ссылку на объекты, которые вы передали в блоке.