Skip navigation.
 
mlRe: NSTimer
FROM : Sherm Pendley
DATE : Tue Apr 03 22:03:20 2007

On Apr 3, 2007, at 3:35 PM, Bill Allaire wrote:

> I'm new to Cocoa, so please bear with me.
>
> I initialize a timer when overriding init:
>         timer = [NSTimer scheduledTimerWithTimeInterval:5.0 target:self 
> selector:@selector(setDevState:) userInfo:nil repeats:YES];
>
> I create an array to manipulate during each timer event in 
> awakeFromNib:
>         tableArray = [NSArray arrayWithObjects:aisle1Table, aisle2Table, 
> aisle3Table, nil];


The +arrayWithObjects: method isn't +alloc or -copy, so tableArray 
hasn't been implicitly retained for you. So, if you want to be able 
to use tableArray later you need to explicitly -retain it. (And don't 
forget to release it when you're done with it.)

> In awakeFromNib: I call:
>         [self setDevState:timer];
>
> When the program runs, the three tables are colored according to 
> their status (online or offline) as expected.  In the debugger the 
> tableArray has a count of three objects.  When the timer fires and 
> enters setDevState: the count of tableArray shows and when this 
> object is accessed, GDB is brought up:
>     {(int)[$VAR count]} objects
>
> If I comment out the line [self setDevState:timer]; and wait for 
> the timer to fire, the debugger is brought up with the same 
> behavior: no count in the array.  I don't understand why I can call 
> setDevState: outside a timer and it works fine but when called by 
> way of the timer things go awry.


TableArray is autoreleased, but when you call it in awakeFromNib: 
you're still in the same pass through the event loop in which 
tableArray was created, so the autorelease pool it's in hasn't been 
released yet. You're getting the timer callback in another iteration 
of the event loop, where the autorelease pool has already been 
released, taking tableArray with it.

Have a look at:

   <file:///Developer/ADC%20Reference%20Library/documentation/Cocoa/
Conceptual/MemoryMgmt/index.html>

Or online:

   <http://developer.apple.com/documentation/Cocoa/Conceptual/
MemoryMgmt/index.html
>

sherm--

Web Hosting by West Virginians, for West Virginians: http://wv-www.net
Cocoa programming in Perl: http://camelbones.sourceforge.net

Related mailsAuthorDate
mlNSTimer Bill Allaire Apr 3, 21:35
mlRe: NSTimer James Bucanek Apr 3, 21:57
mlRe: NSTimer Sherm Pendley Apr 3, 22:03