Halten Sie einen NSThread mit einem NSTimer auf unbestimmte Zeit in der Nähe? (iPhone)

Ich habe einige Webdienstdaten in meiner App, die alle 3 Minuten aktualisiert werden müssen. Ich hatte ein paar Ansätze ausprobiert, habe aber letzte Woche hier einen wirklich guten Rat bekommen. Ich sollte nicht alle 3 Minuten einen neuen Thread erstellen und anschließend versuchen, alle verschiedenen Teile freizugeben und zu synchronisieren, um Speicherfehler zu vermeiden. Stattdessen sollte ich einen "Arbeitsthread" haben, der immer läuft, aber nur dann tatsächlich funktioniert, wenn ich ihn auch gefragt habe (alle 3 Minuten).

Da mein kleiner POC jetzt funktioniert, spawne ich einen neuen Thread imapplicationDidFinishLaunching Methode. Ich mache das so:

[NSThread detachNewThreadSelector:@selector(updateModel) toTarget:self withObject:nil];

- (void) updateModel {

    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    BackgroundUpdate *update = [[BackgroundUpdate alloc] initWithTimerInterval:180];
    [update release];
    [pool release];
}

Ok, dies startet das "BackgroundUpdate" -Objekt mit dem Aktualisierungsintervall in Sekunden. Im Updater sieht es im Moment einfach so aus:

@implementation BackgroundUpdate

- (id) initWithTimerInterval:(NSInteger) secondsBetweenUpdates {

    if(self = [super init]) {

        [NSTimer scheduledTimerWithTimeInterval:secondsBetweenUpdates 
                                        target:self 
                                        selector:@selector(testIfUpdateNeeded) 
                                        userInfo:nil 
                                        repeats:YES];
    }

    return self;
}

- (void) testIfUpdateNeeded {

    NSLog(@"Im contemplating an update...");

}

Ich habe noch nie solche Threads verwendet. Ich war schon immer "autoReleasePool einrichten, arbeiten, Ihren autoReleasePool entleeren und auf Wiedersehen".

Mein Problem ist das sobald dieinitWithTimerInterval ist gelaufen, derNSThread Wenn dies erledigt ist, kehrt es zur updateModel-Methode zurück und der Pool wird geleert. Ich vermute, es hat damit zu tun, dass der NSTimer einen eigenen Thread / Runloop hat. Ich würde mir wünschen, dass der Thread das auch weiterhin hattestIfUpdateNeeded Methode alle 3 Minuten ausführen.

Wie halte ich diesen NSThread für die gesamte Dauer meiner App am Leben?

Vielen Dank für jede Hilfe / Ratschläge :)

Antworten auf die Frage(2)

Ihre Antwort auf die Frage