Objective-c在一些viewController中使用的委托必须发布吗?

时间:2013-08-04 23:43:15

标签: iphone objective-c ipad delegates

在我的app委托中,我有一个对象需要在一些不同的3个viewControllers中使用。 要使用它我在界面

NewsPadAppDelegateiPad *delegate;

在我的实施中

delegate = (NewsPadAppDelegateiPad *)[[UIApplication sharedApplication] delegate];
[delegate.reader setDelegate:self];
....
[delegate.reader doSomthing];

在我的dealloc方法中,我做

[delegate release];
delegate=nil;

我收到错误

[CFString release]: message sent to deallocated instance 0x9d4fac0

我真的需要发布吗?

2 个答案:

答案 0 :(得分:1)

通常,您不应该保留您的委托:这可以避免保留周期 - 两个或多个对象在一个周期中相互保留的情况,从而阻止整个组被释放。

这看起来像是一个ARC前代码,所以你应该避免保留和释放你的代表。

在ARC代码中,您应该声明您的代理人__weak,除非您有特定的理由使用强引用(特别是,当您想要拥有委托对象时保留您的委托;这是非常罕见的 - 实际上,它是通常相反)。

这是good discussion of the topic on why delegates are not usually retained

答案 1 :(得分:0)

根据Cocoa's memory management name convention,您不拥有该对象,因此您不会释放它。当它超出范围时,它将为您发布。