First, I should say I’m using ARC, so retain is not an option. The object’s class is of type NSViewController and has two NSTimers as well as several textfields and buttons. The odd thing is that when the two timers are invalidated, it looks like the object is being released. This is a problem because sometimes I just want to pause or restart them, which means I have to invalidate them, but once I do, the reference is lost, and any message to the object will throw a EXC BAD ACCESS.
I’m not very familiar with memory management or ARC but why is the reference lost depending only on the timers? I mean, just because they’re invalidated does not mean I don’t need the object anymore.
I’ve tried declaring the timers as instance variables and properties but nothing changed.
What I really need is for the reference not to be retained, even when both timers are invalidated. What am I doing wrong?
NSTimerretains its target, so if it is the only reference to the object it will be deallocated when the timer is invalidated. You’ll have to take ownership of your object, preferably by making it a declared strong property.Edit: Changed “delegate” to “target”;
Yes, you’ll have to declare a property and (possibly) an instance variable for it.
The release notes give a good example, there are a couple other good intros around. Make sure that you invalidate the timer if your owner class is ever deallocated, otherwise your view controller will hang around.