Problem der Aufhebung von NSTimer in dealloc

Folgendes ist mein code:

.h-Datei:

#import "Foundation/Foundation.h"
@interface GObject:NSObject{
    NSTimer* m_Timer;
}
@property(nonatomic, retain) NSTimer* m_Timer;

- (void)Initialize;
- (void)TimerCallback:(NSTimer*)pTimer;
@end

.m-Datei:

@implementation GObject

@synthesize m_Timer

- (void) Initialize{
    self.m_Timer = [NSTimer scheduledTimerWithTimeInterval:5.0 
                       target:self 
                       selector: @selector(TimerCallback:) 
                       userInfo: nil 
                       repeats: YES];

}

- (void)TimerCallback:(NSTimer*)pTimer {
    //Some Code
}
- (void)dealloc {
    [m_Timer invalidate]; //--Crashes Here
    [m_Timer release];
    m_Timer = nil;
    [super dealloc];
}
@end

Nun, wenn die dealloc aufgerufen wird, stürzt das Programm ab in die Zeile ungültig zu machen, den timer. Die nächsten zwei Zeilen nicht einmal aufgerufen. Ich bekomme eine Fehlermeldung "EXC_BAD_ACCESS". Kann mir jemand sagen, warum das passiert, und was ist der richtige Weg, zu stoppen und loslassen ein NSTimer member-variable in einer Klasse.

  • Erstellen Sie die getter/setter der property mit @synthetisieren?
  • Ja, ich brauche den Zugriff auf diese timer von außerhalb meiner Klasse auch. Obwohl setter ist nicht erforderlich.
InformationsquelleAutor Prashant | 2009-12-09
Schreibe einen Kommentar