Dan*_*Ray 4 iphone objective-c
我有一种情况偶尔我的-tableView: numberOfRowsInSection:方法要求解除分配的NSArray的计数.我希望能够测试该阵列的方式,是安全的,不会做出僵尸通话被释放.
我的代码目前看起来像:
-(NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section
{
if (! self.offers){
return 0;
}
return [self.offers count];
}
Run Code Online (Sandbox Code Playgroud)
我只是通过调试程序逐步完成并观察它通过! self.offers测试然后残酷地崩溃[self.offers count].我打开了NSZombies,在那一行我得到了NSLog消息:
-[__NSArrayM count]: message sent to deallocated instance 0x283dc0
Run Code Online (Sandbox Code Playgroud)
所以,无论是self.offers,在这一点上,是不是零,但也没有任何在有效指出.我该如何测试呢?
编辑:感谢强烈的爱,朋友们.我已经想通了,为什么我一直在用我的内存管理的麻烦-它实际上是委托关系,挥之不去的时间比他们有用的问题.请参阅此处以获取我的问题的完整答案: 管理对视图退出时取消分配的对象的调用
Ben*_*tto 15
这是不可能的"测试" this--一旦对象被释放,它不见了,指针它实际上是垃圾.对它做任何事都容易崩溃.
对不起,是坏消息,但得到这个工作权利的唯一方法是,以确保内存管理各地(在这种情况下)offers是正确的,在所有uses--保留,并在所有点正确释放,其中该实例变量被操纵,它永远不会是非零垃圾.
你应该尝试运行静态分析(建设 - >建立与分析)开始with--这个工具可以帮助标记存储管理模式问题,而你的一部分很多额外的挖掘.
| 归档时间: |
|
| 查看次数: |
10591 次 |
| 最近记录: |