Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

New empty iOS app has dozens of memory leaks

Using the Leaks Instruments tool on a new, from-scratch, one-view iOS app reports 23 leaks. This doesn't seem right — am I missing something? Repeated runs yield different leak counts, from 16 to 35. Steps to reproduce follow this screenshot.

A similar, unanswered question, was posted at Memory leak in login with amazon sample ios app

Screenshot of Instruments window

I'm using Xcode 10.2.1 (10E1001); iOS 12.2 (Simulator & device both show leaks, with or without Reveal activated.)

  1. Create fresh one-view iOS app.
  2. In Scheme > Run/Debug section, enable
    • Memory Management > Malloc Scribble
    • Logging > Malloc Stack (Live Allocations Only)
  3. Run Product > Profile (⌘I)
  4. First leak check is green; wait for second one.
  5. Twenty-three new leaks! (As shown above.)

However, apart from Instruments, Debug Navigator disagrees:

  1. Run normal debug session
  2. Click "Debug Memory Graph" at top of Debug area.
  3. Debug Navigator (below) has no purple exclamation marks (leak alerts).

Screenshot of Debug Navigator

like image 602
Andrew Duncan Avatar asked May 16 '19 18:05

Andrew Duncan


People also ask

What causes memory leaks in IOS?

A memory leak occurs when allocated memory becomes unreachable and the app can't deallocate it. Allowing an allocated-memory pointer to go out of scope without freeing the memory can cause a memory leak. A retain cycle in your app's object graph can also cause a memory leak.

How detect memory leak IOS app?

Xcode's Memory Graph Debugger If you haven't used this yet, it's easy to access while developing. Tapping on the icon will pause your application and generate a graph of the objects with their references to other objects. If there's leaked memory detected, you will see purple icons on the left pane of Xcode.

Why are memory leaks so common?

Memory leaks are a common error in programming, especially when using languages that have no built in automatic garbage collection, such as C and C++. Typically, a memory leak occurs because dynamically allocated memory has become unreachable.


1 Answers

The release notes for Xcode 10.3 say:

Resolved an issue where running an app in iOS 12.2 or later under the Leaks instrument resulted in random numbers of false-positive leaks for every leak check after the first one in a given run

That sounds exactly like this issue. So it was a bug (a Heisenbug?), and now it’s fixed.

like image 183
matt Avatar answered Sep 30 '22 13:09

matt