Iphone 当我试图释放分配有地址的NSString时,执行错误访问
我有一个试图释放的NSString 问题是,在某些情况下,当我试图释放它时,我会获得Iphone 当我试图释放分配有地址的NSString时,执行错误访问,iphone,objective-c,ios,nsstring,memory-management,Iphone,Objective C,Ios,Nsstring,Memory Management,我有一个试图释放的NSString 问题是,在某些情况下,当我试图释放它时,我会获得EXC\u BAD\u访问权限。NSString有一个分配给它的地址(我可以在底部页面看到它在0xABCDEF处分配了内存) 当有东西存在时,如何在重新释放的同时避免此问题?您可能已经对已释放的字符串调用了[release]。你是怎么分配的?当对象被释放或自动释放时,它不会自动设置为nil(0x0) [[NSString alloc]initWithSomething]需要释放调用 [NSString strin
EXC\u BAD\u访问权限。NSString有一个分配给它的地址(我可以在底部页面看到它在0xABCDEF处分配了内存)
当有东西存在时,如何在重新释放的同时避免此问题?您可能已经对已释放的字符串调用了[release]
。你是怎么分配的?当对象被释放或自动释放时,它不会自动设置为nil(0x0)
[[NSString alloc]initWithSomething]
需要释放调用
[NSString stringWithSomething]
并不像惯例那样,它是自动释放的。您可能已经对已释放的字符串调用了[release]
。你是怎么分配的?当对象被释放或自动释放时,它不会自动设置为nil(0x0)
[[NSString alloc]initWithSomething]
需要释放调用
[NSString stringWithSomething]
按照惯例,它不会自动释放。您可以释放对象,但指向该对象的指针仍然可以有值。只是它是一个垃圾值(即a)
这就是为什么您会看到很多代码,例如:
[myObject release];
myObject nil;
它首先释放对象,然后将指针设置为nil
。这样,发送给它的任何消息都将以静默方式失败(因为在Objective-C中向nil
对象发送消息是安全的),而不是像应用程序那样崩溃
由于您正在检查指针,我怀疑您在内存管理方面做了一些奇怪的事情。不要。只需遵循,只释放您拥有的对象。您可以释放对象,但指向该对象的指针仍然可以有值。只是它是一个垃圾值(即a)
这就是为什么您会看到很多代码,例如:
[myObject release];
myObject nil;
它首先释放对象,然后将指针设置为nil
。这样,发送给它的任何消息都将以静默方式失败(因为在Objective-C中向nil
对象发送消息是安全的),而不是像应用程序那样崩溃
由于您正在检查指针,我怀疑您在内存管理方面做了一些奇怪的事情。不要。只需按照说明操作,只释放您拥有的对象。您能给出一些代码片段吗。。Bcz这可能是因为许多pbm,比如你没有保留,比如tatcheck,你是否会发布两次…你能给出一些代码片段吗。。Bcz这可能是因为许多pbm(如你)没有保留(如tatcheck)检查你是否释放了它两次….+1我通常创建一个宏,如下所示:#定义SXRelease(obj)[obj release];obj=零
。对于free()
:#定义SXFree(ptr)free(ptr);ptr=NULL
。您有一个bug,将var设置为nil只是在掩盖它。最好启用mallocscribble进行开发构建并修复bug。+1我通常创建一个宏,如下所示:#define SXRelease(obj)[obj release];obj=零
。对于free()
:#定义SXFree(ptr)free(ptr);ptr=NULL
。您有一个bug,将var设置为nil只是在掩盖它。最好启用Malloc Scribble进行开发构建并修复错误。在NSString的文档中找不到“initWithSomething”。在NSString的文档中找不到“initWithSomething”。