我的视图控制器中有一些繁重的处理任务,所以我使用 GCD 将它们放在后台线程中。并且任务被封装在一个类 AsyncImageProcessor
@interface AsyncProcessor : NSObject
@property (weak, nonatomic) id<AsyncProcessorDelegate> delegate;
// ... other unrelated stuff
@end
@protocol AsyncProcessorDelegate <NSObject>
- (void) asyncProcessorEvent:(AsyncProcessorEventType) event;
@end
问题是实现委托的视图控制器在 AsyncProsessor 任务分派后立即被解除。当处理完成时,视图控制器内存被释放,委托为零。然后委托事件不能被传递回视图控制器。
我能想到的一种解决方案是定义委托“强”,并在委托方法 asyncProcessorEvent 中,将委托设置为 nil 以在所有处理完成后打破内存循环。但我觉得这是一个 hack,到处都告诉我代表应该被定义为“弱”。
以前有人遇到过这个问题吗?请给一些建议。