当我尝试释放分配了地址的NSString时,EXEC_BAD_ACCESS

时间:2011-08-03 10:00:22

标签: iphone objective-c ios nsstring memory-management

我有一个我尝试发布的NSString。

问题在于,在某些情况下,当我尝试发布它时,我会得到EXC_BAD_ACCESS。 NSString有一个分配给它的地址(我可以在底部看到它已经在0xABCDEF分配了内存)。

如果存在某些东西,如何在重新发布时避免此问题?

2 个答案:

答案 0 :(得分:2)

您可以释放一个对象,但指向它的指针仍然可以有一个值。只是它是一个垃圾值(即dangling pointer)。

这就是为什么你会看到很多代码,例如:

[myObject release];
myObject nil;

首先释放对象,然后将指针设置为nil。这样,发送给它的任何消息都将无声地失败(因为在Objective-C中向nil个对象发送消息是安全的)而不是崩溃,就像您的应用程序似乎正在发生一样。

由于你正在检查指针,我怀疑你正在做一些奇怪的内存管理。别。只需关注Memory Management Rules,只发布您拥有的对象。

答案 1 :(得分:1)

您可能已在已发布的字符串上调用[release]。你是如何分配它的?释放或自动释放对象时,它不会自动设置为nil(0x0)。

[[NSString alloc] initWithSomething]需要发布电话。

按照惯例,

[NSString stringWithSomething]没有自动释放。