为什么仪器"泄漏"模板没有在我的iOS应用程序上发现我的内存泄漏?

Bea*_*red 2 iphone memory-leaks instruments ipad

我正在深入研究iOS开发并熟悉这些工具.在每天结束时,我在我的应用程序上执行"Run with instruments tool - > Leaks"以检查我当天可能实施的任何内存泄漏.它似乎很少发现任何泄漏,虽然我想我只是一个自然的iOS程序员,但我拒绝相信;)

无论如何,我刚刚在我的代码中找到了我认为是内存泄漏的东西,并且它没有被仪器捕获.我有这行代码......

gkSession = [[GKSession alloc] initWithSessionID:@"testID" displayName:@"Temp Display Name" sessionMode:GKSessionModeClient];
Run Code Online (Sandbox Code Playgroud)

我发现release我的代码中没有调用任何地方.我的问题是......

  1. 这是内存泄漏吗?
  2. 如果是这样,仪器可能没有抓住它的原因是什么?

我明显担心的是我的代码中有内存泄漏而且Instruments没有捕获它们.

非常感谢您的帮助!

Dar*_*ron 6

有多种类型的动态分配内存.

  1. 引用计数大于零的内存仍然被引用并且正在使用中.

  2. 引用计数为零的内存仍然被引用并仍在使用中.

  3. 引用计数大于零且未引用的内存.

  4. 引用计数为零的内存,未引用.

  5. 引用计数大于零的内存仍然被引用且未使用.

类型1在使用内存中是正常的.类型2是一个错误,当您尝试遵循该引用时,该错误将被报告为非法访问.类型3是仪器检测到的泄漏类型.类型4应该由内存系统释放.

类型5是仪器无法检测到的泄漏,也不会被完整的垃圾收集器处理.这就是你似乎拥有的.

编辑:

我忘记了类型6 - 内存的引用计数与实际引用的数量不匹配.这可能最终会变成类型2或4.