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