我们正在继承UITabBarController
以及UITabBarControllerDelegate
来处理有关制表符切换的某些事件。
现在,在我们的自定义标签栏控制器中,我们有:
- (id)initCustomTabBarController {
self = [super init];
if(self) {
[self setDelegate:[[CustomTabBarControllerDelegate alloc] init]];
// ...
}
return self;
}
由于我们将项目转换为ARC,因此委托被释放到早期,导致选项卡切换运行到解除分配的实例。
该属性在assign
中定义为UITabBarController.h
- 我显然没有影响。
如何使委托对象“实时”比init方法更长?
答案 0 :(得分:2)
是的,这在ARC下是正常的,因为没有提到它(也就是强大的预言)它应该在周期结束时释放。
只需在您指定CustomTabBarControllerDelegate
的类中创建一个属性,使其变得强大。然后将此属性分配给委托。
在非ARC中你设置它的方式可能会造成内存泄漏。
答案 1 :(得分:2)
你完成它的方式,预计委托不会比对象寿命长,因为它很弱。记住,你创建了这个对象,你可以坚持下去。
但是 - 您使用的模式不正确。
委托的要点是,它为类无法为其自身添加的类提供方法实现,因为它没有足够的信息。例如,表视图委托。表视图为了通用,不能知道要显示多少行或部分,因此它要求它的委托提供此信息。
在您的情况下,您有一个对象正在创建它自己的委托。在这种情况下,为什么要费心代表呢?只需在类中实现方法即可。