如果A类正在使用B类并且A类是B类的委托(delegate),那么在B类的dealloc中将委托(delegate)设置为nil可以吗?我看到代码通常在 A 类的 dealloc 中将委托(delegate)重置为 nil,但不确定以这种方式或另一种方式进行真正的区别。
例如这是通常的方式:
// somewhere in class A
- (void) someFunc {
self.b = [[B alloc] init];
self.b.delegate = self;
}
- (void) dealloc {
self.b.delegate = nil;
[self.b release];
}
最佳答案
是的,您应该在 classA 的 dealloc 中将 classB 的委托(delegate)属性设置为 nil。
这不是内存管理问题,因为委托(delegate)属性应该标记为分配,而不是保留,以避免循环保留(否则永远不会调用 dealloc)。问题在于,否则 classB 可能会在发布后向 classA 发送消息。
例如,如果 classB 有一个 delagate 调用说“被隐藏”,并且 classB 在 classA 之后被释放,它会向已经解除分配的 classA 发送消息导致崩溃。
请记住,您不能始终保证 dealloc 顺序,特别是如果它们是自动释放的。
所以是的,在 classA 的 dealloc 中取消委托(delegate)属性。
关于objective-c - 您应该在使用委托(delegate)的类中还是在类本身中将委托(delegate)设置为 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1071768/