Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 在dealloc方法中,需要或不需要将任何委托设置为nil_Iphone_Objective C_Uitableview - Fatal编程技术网

Iphone 在dealloc方法中,需要或不需要将任何委托设置为nil

Iphone 在dealloc方法中,需要或不需要将任何委托设置为nil,iphone,objective-c,uitableview,Iphone,Objective C,Uitableview,我已经在我的视图中创建了tableview,如下所示 table = [[UITableView alloc] initWithFrame:CGRectMake(0, 44, 320, 370) style:UITableViewCellStyleDefault]; table.delegate = self; table.dataSource = self; table.separatorStyle = UITableViewCellSeparatorStyleNone; [self.view

我已经在我的视图中创建了tableview,如下所示

table = [[UITableView alloc] initWithFrame:CGRectMake(0, 44, 320, 370) style:UITableViewCellStyleDefault];
table.delegate = self;
table.dataSource = self;
table.separatorStyle = UITableViewCellSeparatorStyleNone;
[self.view addSubview:table]; 
在dealoc方法中,我写的如下

table.delegate = nil;
 table.dataSource = nil;
[table release];
table=nil;
这是更好的方式或低于一个更好

[table release];
table=nil;
我想知道如果我不重置委托和数据源会发生什么

Thanq来自:

这是一个防御性的编程动作。它清除了对委托对象的引用,以防对象中的其他对象在您告诉它您已完成委托后尝试访问该委托。作为dealloc的一部分,您可能有一个方法或执行一些操作来触发对委托进行调用的KVO通知。因此,将委托的引用设置为nil可以防止这种情况发生。如果它真的发生了,你可能会以一些奇怪的崩溃而告终,这些崩溃很有趣,可以复制和修复


如果要将充当委托的对象解除分配给其他对象,则需要确保在调用
[super dealloc]
之前,已将其委托设置为nil(假设对象不保留其委托的正常模式)。这是因为当
[super dealloc]
返回时,此对象不再是有效对象,并且它作为委托的对象有效地具有悬挂引用(如果它们未设置为nil)


在这种特殊情况下,您可能不这样做就可以逃脱,因为您的对象的dealloc可能不会被调用,除非UI正在被拆除,并且表视图不再需要使用其委托或数据源,但不要押注于此。

要添加到上述答案中,您不需要

table = nil;
在你的房间里。这不会痛,但是没有必要把你的IVAR都弄平。您的视图正在解除锁定,因此您的IVAR将不再可访问。您可能会将其与以下内容混淆:

self.table = nil;
如果您通过属性访问ivar,它可以作为另一种释放方式

当然,如果已启用ARC,则根本不需要释放


为了回答您的实际问题,如果您不在视图的dealoc上取消表的委托和数据源,那么什么也不会发生。它们被设置为视图,该视图正在发布过程中。在这种情况下,不这样做不会有任何问题。从理论上讲,它的形式很好。

可能重复:那么快速回答是肯定的,在dealloc语句中将委托设置为零对您来说更安全。@Sebastien:这不是该问题的重复。