我有一个我尝试发布的NSString。
问题在于,在某些情况下,当我尝试发布它时,我会得到EXC_BAD_ACCESS
。 NSString有一个分配给它的地址(我可以在底部看到它已经在0xABCDEF分配了内存)。
如果存在某些东西,如何在重新发布时避免此问题?
答案 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]
没有自动释放。