I have an object that is being retained more than necessary (most likely due to a property that is strong
instead of weak
). Big codebase, so it's hard to find where.
How can I find all the lines in which this object is being retained when using ARC?
If I weren't using ARC I guess I could simply override retain
and check from where it's called. Can I do something similar with ARC?
To track growth of an application, Heapshot Analysis has proven very effective. It will capture both true leaks and accretion of memory where the allocations are not accounted for by leaks.
You can see all of the retain/release events, and their backtrace, using the Allocations instrument. Hit the little (i) button on the Allocations instrument and turn on "Record reference counts". Turning on "Only track active allocations" reduces the amount of data collected by Instruments, making it snappier (and dead allocations aren't really useful in this context, but can be in others).
With that, you can dive into any allocation (by clicking on the right-arrow in the address field), see all the retain/release events and see exactly where they occurred.
I managed to find the offending retain
by doing the following:
-fno-objc-arc
to the object class Compiler Flags to disable ARC for that class.retain
(just call super
) and put a breakpoint on it.retain
is called.If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With