我有一个已经在iOS 6上进行了广泛测试并且运行良好的应用程序,而在iOS 7上它几乎总是崩溃(但不是100%)Thread 1: EXC_BAD_ACCESS主要错误,没有太多的痕迹.我完全不知道它的下落.我相信我的代码中的某些内容与iOS核心方法不兼容.
我能够识别的最好的是,在评论代码的以下部分时,一切运行良好.
UIGraphicsBeginImageContext(coverView.bounds.size);
[coverView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *coverImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[UIImageJPEGRepresentation(coverImage, 0.8f) writeToFile:coverFilePath atomically:YES];
//Create thumbnail of cover image
CGSize size = CGSizeMake(116.0f, 152.0f);
UIGraphicsBeginImageContext(size);
[coverImage drawInRect:CGRectMake(0.0f, 0.0f, size.width, size.height)];
coverImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[UIImageJPEGRepresentation(coverImage, 0.8f) writeToFile:coverThumbnailFilePath atomically:YES];
Run Code Online (Sandbox Code Playgroud)
任何人都可以建议我下一步要调试的地方吗?请注意,同样的应用程序在iOS 6中运行得非常好,而且这个bug非常适合iOS 7.
编辑:附加僵尸堆栈跟踪:到目前为止我无法使用它,但可能对专家眼睛有用:)

提前致谢,
尼基尔
好的,最后我把它弄好了.这是一个很好的学习经验:).
实际上,"EXE_BAD_ACCESS"的本质确实暗示了糟糕的内存管理,即我要求访问不存在的内容.不幸的是,(或者在逻辑上,我之前错过了)泄漏不会发现它.但是当我描述我的应用程序时,它们被抓住了zombies.
由于该方法发生了问题
[self drawViewHierarchyInRect:self.bounds afterScreenUpdates:YES]; // iOS 7
Run Code Online (Sandbox Code Playgroud)
或者在iOS 6中等效
[self.layer renderInContext:UIGraphicsGetCurrentContext()];
Run Code Online (Sandbox Code Playgroud)
我的应用程序进度的顺序是这样的:
render view -> update a few things -> request a screenshot be taken on update
-> update the view -> return to previous view (releasing this one)
Run Code Online (Sandbox Code Playgroud)
现在,因为我要求在更新时拍摄屏幕截图,所以这些方法一直等到视图更新发生.但是,在更新后我立即发布了superview.因此,这些方法(在等待更新之后)this在被释放后调用了视图.
现在,我不知道这是Apple的iOS错误还是我对它的理解不足.但是现在,我不会在查看更新后立即发布超级视图,一切正常:)
谢谢大家帮助.让我知道如果我在这里做了一些奇怪的事情,可以通过更有效的方式防止这种行为.
最好的,Nikhil