Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa touch 在代码仍在运行时释放对象时,有没有避免错误的方法?_Cocoa Touch_Memory Management - Fatal编程技术网

Cocoa touch 在代码仍在运行时释放对象时,有没有避免错误的方法?

Cocoa touch 在代码仍在运行时释放对象时,有没有避免错误的方法?,cocoa-touch,memory-management,Cocoa Touch,Memory Management,我有一个UIView子类,它在调用-drawRect:时绘制自身。这只需要一点时间,但在极端情况下,例如内存不足以及转到另一个视图控制器时删除实例,在释放对象之前绘制函数不会完成 我该如何处理这个问题?解除分配会导致对[self…]的任何调用抛出EXC_BAD_访问,绘图函数会执行此操作以确定如何绘制自身 注: 我主要使用这个框架来处理内存管理。问题在于UIView使用的CATiledLayer对-drawRect:的异步调用,这些调用在发布UIView之前进入。但是,由于它是异步的,所以 -D

我有一个UIView子类,它在调用
-drawRect:
时绘制自身。这只需要一点时间,但在极端情况下,例如内存不足以及转到另一个视图控制器时删除实例,在释放对象之前绘制函数不会完成

我该如何处理这个问题?解除分配会导致对[self…]的任何调用抛出EXC_BAD_访问,绘图函数会执行此操作以确定如何绘制自身

注:


我主要使用这个框架来处理内存管理。问题在于UIView使用的CATiledLayer对
-drawRect:
的异步调用,这些调用在发布UIView之前进入。但是,由于它是异步的,所以<代码> -DeDeDeVeleMeMyRebug 在绘图时运行,导致视图在绘图中间释放。

< P>从读取苹果的内存管理规则开始:


一句话:“处理”问题的方法是确保正确管理对象及其内存使用。由于解除分配而导致的崩溃不是什么需要捕获的东西,而是应用程序中需要修复的一个完全错误。

我认为这里的答案是:使用
@synchronized

注意:我已经将其包装在一个通用的try-catch块(NSException*),但是EXC\u BAD\u访问显然不是一个例外。我看不到任何方法来修复它。我已经阅读了文档,并且主要使用该框架来处理内存管理。问题在于从CATiledLayer对drawRect的异步调用,这些调用是在对象被释放后传入的。如果您遇到EXC_BAD_访问错误,几乎100%都是程序员的错。我建议您启用僵尸,并通过这种方式进行调试,以跟踪您不应该释放的对象。我已经这样做了。UIVIEW是被释放的对象,正好在被绘制的时候。如果UIVIEW是问题,那么,显然,你没有正确地保留它或它的子视图之一。虽然没有完美的代码,即使是苹果的,但这听起来绝对像是程序员的错误,而不是SDK/OS中的错误。内存管理问题有时很难追踪。再次,启用zombies并准确地找出有问题的对象是什么(谷歌NSZombieEnabled获取更多关于如何实现这一点的信息)。