Search code examples
objective-ccocoaxcode4nsopenpanelnssavepanel

Why is NSOpenPanel/NSSavePanel showing memory leak?


Not sure why, but making a simple [[NSOpenPanel openPanel] runModal]; creates a memory leak - seen in Leaks Instrument.

Seems off.

It's an auto-released object, shouldn't it be automatically released after ARpool is drained?

Is there a way to fix this?


Solution

  • NSOpenPanel is a singleton, which means you always get the same instance of the object every time you use it. This means that the first time you call [NSOpenPanel openPanel], an instance of NSOpenPanel is created and not released.

    This is not a leak, it's an optimisation. However, sometimes the Leaks instrument picks up such once-only instantiations as leaks because the instances are (by design) never released.

    NSOpenPanel is such a widely-used and tested class that any leaks in its standard implementation are unlikely to exist.