我一直在犯这个错误,我只是不明白为什么。我是新手,所以也许有人可以指出问题。
错误:
-[ShareXML release]: message sent to deallocated instance
代码:
if(self.share){
NSLog(@"SHARE ALREADY EXISTS");
[self.share startSomeProcess];
}else{
NSLog(@"share xml");
ShareXML *shareXML = [[ShareXML alloc] init];
self.share = shareXML;
self.share.delegate = self;
[self.share startSomeProcess];
NSLog(@"SHARE XML RELEASED");
[shareXML release];
}
ShareXML是一个NSObject。我在视图控制器上使用几乎相同的代码,它可以工作。 谢谢!
答案 0 :(得分:1)
要查找发送到解除分配实例的消息的位置,请按照on CocoaDev所述设置环境变量NSZombieEnabled。
为了让编译器找到错误的机会很大,请进行分析器构建。它位于Build菜单中,“Build and Analyze”,或者你可以点击shift-ctrl-A。
如果您确切地确定了问题的位置,那么它可能会很明显,但您可以发布更多代码。
答案 1 :(得分:1)
如果您显示视图控制器,它将由导航控制器/呈现父视图/标签栏控制器保留。在这种情况下,您的ShareXML对象不会被任何内容保留。正如@Sam Ritchie指出的那样,如果你声明@property (nonatomic, retain) ShareXML *share;
,那么在设置self.share
时它会保留它。
确保在dealloc方法中释放它。我首选的方法是self.share = nil;
,它会释放self.share当前保留的内容,并将其设置为nil。
答案 2 :(得分:0)
听起来像共享属性不是“保留”。因此在析构函数中,当共享成员被释放时,它将被第二次释放,因为已经释放了相同的对象shareXML。
答案 3 :(得分:0)
我找到了!我在ShareXML中发布了委托。感谢所有的评论,它让我检查了我的其余代码!