例如:我有一个视图控制器并摆脱它。但是仍然有一个变量存储着它的内存地址。在EXEC_BAD_ACCESS中访问该结果。当然。但是:有没有办法检查这个变量是否仍然有效?即如果它仍然指向内存中存在的东西?任何方式来检查一个实例是否仍在内存中?
回答
您需要再次阅读:
Cocoa Memory Management Guidelines
总之,如果你想要坚持你的东西必须retain
它。
如果你想要东西消失而你以前保留它,你必须release
或autorelease
它。
你绝不能呼叫dealloc
直接(除[super dealloc];
在您dealloc
方法的每一个的结束)。
你绝对不能release
或autorelease
,你没有retain
的对象。
注意到一些方法做返回保留的对象,你必须release
。如果你是alloc
一个类的实例,那就意味着一个retain
。如果你copy
和实例,副本被保留。
如果您曾经尝试使用retainCount
方法,请不要。这没有用。仅将保留计数视为增量;如果添加,则必须减去,但绝对值是应该忽略的实现细节。
(换句话说,即使有办法明确检查对象的有效性 - 有没有 - 那将是错误的答案)
哦,使用建立与分析功能在Xcode。它在确定内存管理问题等方面做得非常好,但并不完美。
+1阿们,神甫。这是记忆管理的福音。 – 2010-02-25 20:25:53
如果变量,你指的是指向你的对象是否仍然引用有效的内存,则:
MyClass的* MYVARIABLE = [[MyClass的页头] INIT];东西
//吨发生......
如果(MYVARIABLE =零!) //做更多的东西
使用“NSZombieEnabled”中断点。
由于这个原因,只有所有强烈建议我们使用访问器。如果你的对象在任何地方被释放,它将被赋值为零,并且如果你调用了Nil对象上的任何API或方法,将没有任何伤害。所以请养成使用Accessors的习惯。
您只需在构建设置中将此NSZombieEnabled标志添加为您的应用程序的参数即可。并启用它。现在你在调试模式下运行你的应用程序。如果任何这样的崩溃即将发生,这个断点将告诉你哪个对象被释放以及它在哪里崩溃。
干杯, Manjunath
- 1. 如何检查一个Activity的多个实例是否存在
- 2. 是否有任何方法来检查行中是否存在多列的值
- 3. 任何方式来检查是否检测到哈尔级联?
- 4. 任何方式来检查在after_filter操作是否成功?
- 5. 如何检查一个ALAsset是否仍然存在使用URL
- 6. DirectoryInfo.LastWriteTime是一种安全的方式来检查文件是否仍在上传?
- 7. 任何方式来检查每个表是否在MYSQL 5.5中设置innodb_file_per_table?
- 8. 任何方式来判断Oracle导出是否仍在运行?
- 9. 使用普通测试来检查实例是否存在
- 10. MSVC - 任何检查函数是否实际内联的方法?
- 11. Pandaic的方式来检查一个数据帧是否有任何行
- 12. SQL函数来检查表中任一列是否存在任何值
- 13. 任何方式来检查邮件是否交付?
- 14. 检查会话是否仍然存在
- 15. 检查歌曲是否仍然存在
- 16. 如何检查传统ASP中是否存在对象实例?
- 17. 如何检查SQL Server实例中是否存在凭据?
- 18. pythonic检查方式是否存在?
- 19. 检查一个方法的实例是否已经执行
- 20. 在每个控制器调用中是否存在一个钩子来检查用户是否仍然有效?
- 21. 是否有可能在std ::可选w/o中放置一个实例来检查/破坏前一个实例?
- 22. 检查一个对象是否已经在Java中实例化
- 23. 检查一个类是否已经在iOS中实例化了
- 24. 检查NSString实例是否包含在一个NSArray中
- 25. 测试用例来检查另一个字符串是否存在另一个
- 26. 检查一个值是否存在于熊猫任何列的任何行中?
- 27. 是否有任何方法来检查两个标签文本是否中断?
- 28. 任何方式检查浏览器中的Orbeon表单实例?
- 29. 如何检查表中的任何一列中是否存在一个值sql
- 30. 检查一个类型是否是Haskell中的Show实例?
如果你问纯粹是为了调试原因,请说清楚。正如其他人所说,如果您要求在您的应用中实际发生的事情,那么这是一种糟糕的做法。 – Ken 2010-02-25 19:00:59