在我的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
我真的需要发布吗?
答案 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,您不拥有该对象,因此您不会释放它。当它超出范围时,它将为您发布。