1

我正在从 NavigationController 的子视图调用 NSOperation。

MyOperation *op = [[MyOperation alloc] target:self action:@selector(didFinishOperation)];

Operation 从服务器加载一些数据,对其进行解析,然后发送一个

[target performSelectorOnMainThread:action withObject:nil waitUntilDone:YES];

当工作完成时。这通常工作...

问题是当我在 NSOperation 执行其工作时从导航控制器按下后退按钮时,应用程序崩溃,因为该操作引用了一个已释放的实例。

我试过保留操作 - 但它仍然崩溃......

提前致谢

4

2 回答 2

4

Chris 走在了正确的轨道上,但它没有涵盖当您尝试取消操作时操作完成并且它仍然会崩溃的情况。如果操作在 中执行main,取消不会生效。

尽管如此,在你的目标被摧毁之前尝试取消它,但target在尝试向它发送消息之前测试它是否仍然存在。另外,在尝试发送消息之前检查您是否被取消:

if ( self.isCancelled ) return;
于 2009-11-14T08:16:48.153 回答
0

在您的 UIView dealloc 方法中,您可以取消操作并将其从其 NSOperationQueue 中删除。

于 2009-11-14T08:05:06.510 回答