2014-09-25 10 views
9

Sto provando a generare un grafico e a prendere uno screenshot uno alla volta. L'applicazione funziona bene una volta e poi quando provo a catturare di nuovo gli screenshot la seconda volta, l'applicazione si blocca dicendo che l'applicazione è terminata a causa di un errore di memoria. Questo accade solo su iOS8 non su iOS7. Qui il codice per catturare lo screenshot, si è schiantato sulla linea - [view.layer renderInContext:context]; L'applicazione utilizza 124 MB al picco di utilizzo e non vi è alcun avviso di memoria generato prima del crash. Anche se non ci sono altre applicazioni in esecuzione in background, l'applicazione si arresta in modo anomalo su iOS 8. E se commento la riga sopra, l'applicazione non si blocca affatto, ma lo screenshot eseguito non è completo.L'applicazione si blocca solo su iOS 8 a causa di un errore di memoria

- (BOOL)captureView:(UIView *)view forGraph:(NSString *)graphName 
{ 

BOOL isImageCpatured = NO; 

@try { 
    CGRect rect = view.bounds; 
    UIGraphicsBeginImageContext(rect.size); 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    [view.layer renderInContext:context]; 
    UIImage *img = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    CGImageRef imageRef; 

    if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) { 
     imageRef = CGImageCreateWithImageInRect([img CGImage], CGRectMake(0, 113, 1024, 532)); 
    } 
    else { 
     imageRef = CGImageCreateWithImageInRect([img CGImage], CGRectMake(0, 93, 1024, 532)); 
    } 

    img = nil; 

    UIImage *image = [UIImage imageWithCGImage:imageRef]; 
    CGImageRelease(imageRef);   
    NSData *pngData = UIImagePNGRepresentation(image); 

    [pngData writeToFile:[Utility_Class documentsPathForFileName:[NSString stringWithFormat:@"%@BG.png",graphName]] atomically:YES]; 

    pngData = nil; 

    image = nil; 

    isImageCpatured = YES; 

} 
@catch (NSException *exception) { 
    return isImageCpatured; 
} 
@finally { 

} 

return isImageCpatured; 
} 

Cosa potrebbe essere che non va? Non sono in grado di trovare alcuna soluzione. Ho scoperto che la pressione della memoria è diversa dall'errore di memoria. Ma nessuna soluzione su come risolverlo. Anche la funzione captureView è chiamata all'interno di un pool @autorelease.

Ecco il registro anomalo sconosciuto generato su iOS8. iOS7 non si blocca mai.

Incident Identifier: 24F29058-7D47-40B6-87B4-2183220DB55B 
CrashReporter Key: 6079e634bf7aeebb0e4d9ea95336cb33b0fc49dd 
Hardware Model:  iPad4,1 
OS Version:   iPhone OS 8.0 (12A365) 
Kernel Version:  Darwin Kernel Version 14.0.0: Tue Aug 19 15:09:47 PDT 2014; root:xnu-2783.1.72~8/RELEASE_ARM64_S5L8960X 
Date:    2014-09-25 18:21:25 +0530 
Time since snapshot: 88 ms 
Free pages:        2219 
Active pages:       96945 
Inactive pages:       48102 
Speculative pages:      314 
Throttled pages:       0 
Purgeable pages:       2 
Wired pages:        77304 
File-backed pages:      40758 
Anonymous pages:       104603 
Compressions:       1467794 
Decompressions:       158957 
Compressor Size:       24980 
Uncompressed Pages in Compressor:  119797 
Page Size:        16384 
Largest process: my application Name 
+0

> potreste fornire il registro blocchi ?? –

+0

aggiunto registro di arresto anomalo. –

+0

Ho anche un'app che va in crash, apparentemente casualmente, in iOS 8 ma non in iOS 7. V strano ... – mm2001

risposta

Problemi correlati