Spa*_*Dog 1 iphone iphone-sdk-3.0
我的应用程序中有几个对象在某些时候可以变为零,我有理论上用于将这些对象设置为零的方法.
但是,如果我尝试将一个不存在的对象放到零,那么应用程序将崩溃.
例如...
[object1 release];
object1 = nil;
Run Code Online (Sandbox Code Playgroud)
//... 在那之后
[object1 removeFromSuperview]; // this will crash
Run Code Online (Sandbox Code Playgroud)
然后我想,为什么不在去除之前测试对象是否存在...
if (object1 != nil)
[object1 removeFromSuperview];
// this will crash too, because object1 cannot be tested for nil because it does not exist
Run Code Online (Sandbox Code Playgroud)
如果对象存在nil,我如何检查对象是否存在?某事
if (object1 exists( {
if(object1 != nil))
[object1 removeFromSuperview)
}
Run Code Online (Sandbox Code Playgroud)
这可能吗?
我加上这个澄清......
我的意思是这样的:想象我在标题上声明了object1并在代码上初始化了.因此,它存在并指向有效的参考.在某些时候,对象可能会被释放,因此引用仍然指向一个对象,但对象被释放.即使我在释放后把物体放到零,我也无法用它做任何事情.
问题是:我有一些异步的方法.其中一个扫描某些对象并在找到它们时将其删除.我必须检查对象是否存在,并且引用指向有效对象,然后再次释放它.这就是重点:如何在再次释放对象之前测试对象是否存在及其引用指向有效的现有对象,以及再次释放已释放的对象并使应用程序崩溃.
简而言之,您确定指针是否仍然有效的问题正在走错路.
释放对象后,必须立即将其值设置为null,以便不再控制它.如果两个方法以异步方式运行访问同一个对象,则必须在该点同步它们,以便在另一个线程有机会中断之前,在一个线程中同时发布和设置为null.
| 归档时间: |
|
| 查看次数: |
3513 次 |
| 最近记录: |