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
> potreste fornire il registro blocchi ?? –
aggiunto registro di arresto anomalo. –
Ho anche un'app che va in crash, apparentemente casualmente, in iOS 8 ma non in iOS 7. V strano ... – mm2001