即使取消分配,也不会返回nil

时间:2010-11-04 17:32:18

标签: iphone objective-c delegates release-management

我在这里碰到了一个真正的困难。

我的课程是自我创建的(一个+ (void) start; - 方法),它被发送给一个代表。 我需要通过委托选择器向委托发送一些消息。为了检查委托是否已被释放,我已经尝试if (delegate == nil/NULL),但即使它真的被释放,它仍然说它不是。

我该如何解决此问题? (委托被分配到id

这就是我的应用程序的构建方式:

AppDelegate
> NavController
>> TableView 
>>> Post 
>>>> GetData 

GetData是自创的类。 Post是GetData的委托,由TableView / NavController发布。发布Post后,它也设置为nil 换句话说, GetData不会释放它的代理

2 个答案:

答案 0 :(得分:5)

取消分配指针的内容不会自动将指针设置为NULL。你需要明确地这样做,例如。

[delegate release];
delegate = nil;

答案 1 :(得分:3)

您无法检查对象是否已被释放。另一个对象可能会出现并占用相同的内存空间,与原始对象无法区分。

具有委托的类的用户负责在释放委托对象时将委托设置为nil。对象本身无法检测到它。