【发布时间】:2012-10-03 16:01:17
【问题描述】:
当一个由 UIViewController 创建的类作为另一个类的完成块时,当 UIViewController 得到一个 dealloc 调用时,内存管理生命周期是如何工作的?
假设 UIViewController 继承类实例化了一个类,ControllerMediatorClass。
ControllerMediatorClass 反过来调用另一个类 ClassThatDealsWithNetworking,它的工作需要一些时间才能完成。
如果 UIViewController 在 ClassThatDealsWithNetworking 完成之前获得它的 dealloc,那么它所拥有的类什么时候会被清理?
当 MyUIViewController 将“ControllerMediatorClass”的实例设置为 nil 时,它是否不会立即被释放,因为 ControllerMediatorClass 仍然充当 ClassThatDealsWithNetworking 实例的完成块?
MyUIViewController:
@property (nonatomic, strong) ControllerMediatorClass *mediatorClass;
- (IBAction)userTappedSomething
{
[mediatorClass makeANetworkCall];
}
- (void)dealloc
{
self.mediatorClass = nil;
}
ControllerMediator类:
- (void)makeANetworkCall
{
ClassThatDealsWithNetworking *networkCommand;
[networkCommand execute:^(NSDictionary *data)
{
// handling completion that
} error:^(MyError *error)
{
// handling completion
}
];
}
(使用 ARC)
【问题讨论】:
-
+1 使用调解器来处理这个!
标签: objective-c ios memory-management objective-c-blocks