Jon*_*Jon 9 xcode objective-c instruments ios
我正在关注斯坦福iOS开发讲座,我有一个计算器大脑课程,它已经alloc init在控制器中,但我没有release在它dealloc.
- (CalculatorBrain *)brain
{
if (!brain)
brain = [[CalculatorBrain alloc] init];
return brain;
}
Run Code Online (Sandbox Code Playgroud)
我从XCode运行 - >运行与性能工具,应用程序启动,没有出现泄漏,然后我点击了iOS模拟器中的主页按钮,没有,我然后双击主页按钮并关闭应用程序,仍然没有.
我也做了Build&Analyze,它没有发现任何东西
你能不能让我知道为什么它不接受它?
看起来好像没有可检测到的泄漏.看看这一行:
brain = [[CalculatorBrain alloc] init];
Run Code Online (Sandbox Code Playgroud)
只要brain指向一个对象,该对象就不会被视为"内存泄漏".如果在某些时候你这样做,
brain = nil;
Run Code Online (Sandbox Code Playgroud)
然后泄漏将登记.取消分配容器对象也可以实现这一点,但是你确定它已被解除分配吗?(例如,当程序退出时,它不会被释放.)
问题:泄漏探测器无法检测到所有内存泄漏 - 这是一个经过数学证明的事实.大多数探测器只检测无法到达的物体,而且许多泄漏探测器特别容易受到漏报的影响 - 在C中,很难在运行时判断指针和整数之间的区别.
编辑:听起来你的应用程序只创建一个控制器实例,它只创建一个实例CalculatorBrain.如果你想想内存泄漏真的就是,你可以将其定义为你的程序不释放回操作系统未使用的内存.
CalculatorBrain总是在使用,因此它不是泄漏. 如果你想创建一个泄漏来查看它的外观,你可以CalculatorBrain在程序运行时多次创建一个新的,但忘记发布未使用的版本.在这种情况下,随着程序的运行,CalculatorBrain会积累越来越多的实例.在iOS和其他嵌入式系统上,这通常会导致程序崩溃.在现代64位计算机上,它将逐渐填满可用的交换空间,直到您用完交换,地址空间或其他资源 - 导致程序崩溃或使系统无响应.
标准做法是不关心释放整个程序运行时应该存在的对象.