0

在我的应用程序委托中,我有一个对象需要在一些不同的 3 个视图控制器中使用。要使用它,我在界面中执行

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

我真的需要释放它吗?

4

2 回答 2

1

一般来说,您不应该保留您的委托:这可以让您避免保留循环 - 两个或多个对象在一个循环中相互保留的情况,从而防止整个组被释放。

这看起来是 ARC 之前的代码,因此您应该简单地避免保留和释放您的委托。

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

这是关于为什么通常不保留代表的主题的一个很好的讨论

于 2013-08-04T23:55:24.330 回答
0

根据Cocoa 的内存管理名称约定,您不拥有该对象,因此您不会释放它。当它超出范围时,它将为您发布。

于 2013-08-04T23:52:01.487 回答