2016-04-15 11 views
11

Obecnie napotykam problem z pamięcią w budowaniu aplikacji na iOS. Sprawdziłem wycieki pamięci za pomocą instrumentów. Zauważyłem, że istnieje jeden rodzaj przecieków, który ciągle wyświetla się o nazwie swift_slowAlloc, o czym nie mam pojęcia. Fragment błędu podano poniżej.Aplikacja na iOS: zakończona z powodu problemu z pamięcią [powiązaną z kodem swiftSlowAlloc lub UII]

Memory Leaks

Innym powodem, myślę, że może się zdarzyć, ze względu na obciążenia kilku UIImages w mojej aplikacji. Aby udostępnić tło, biorę różne fragmenty oryginalnego obrazu w mojej aplikacji i przetwarzam je na nich. Jednak nie muszę przechowywać zdjęć do dalszych obliczeń. Użyłem autoreleasepoin do zwolnienia UIImage; ale wątpię, żeby to działało. Poniżej podano przykład:

@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]; 
     } 
    } 

Czy ktoś może sugerować coś w tej sprawie?

+0

Jakieś aktualizacje tego? Widzimy coś podobnego. Moja hipoteza polega na tym, że iOS zamyka aplikacje, które w krótkim czasie są głodne. –

Odpowiedz

0

Oto kilka możliwych przyczyn, które mogą spowodować przeciek pamięci w programie nawet jeśli za pomocą łuku:

  1. ustawić silne odniesienie do dominującej w obiekcie dziecięcej. Powoduje to zatrzymanie cyklu.
  2. Ustawiono silne odniesienie do delegata w interfejsie.
  3. Nie zapomniałeś zwolnić obiektu, gdy wykonasz bezpłatne mostkowanie po przeniesieniu własności.
  4. Zapomniałeś ustawić słabe odniesienie do obiektów, które przekazałeś w bloku.
Powiązane problemy