ObjectiveCeeds › iPhone: NSTimer im Standby

iPhone: NSTimer im Standby

Von Manfred Kreß

Seite 1 von 1



In einer App, welche Daten verschlüsselt auf dem iPhone speichert, sollte der Bildschirm nach einer bestimmten Zeit der Inaktivität gesperrt werden. UIApplication überschrieben, die Events abgefangen und bei jedem Event den Timer wieder hochgesetzt. Soweit einfach. Allerdings gab es einen kleinen Haken!

Hat sich die das iPhone in den Ruhezustand begeben, wurde der Timer hinterher nicht gefeuert. Im Fall dieser App eine echte Sicherheitslücke. Das Problem lässt sich allerdings einfach lösen. Zumindest, wenn man die Lösung einmal gefunden hat. Ich habe zuerst einen "scheduled timer" verwendet, wie man das wohl aus Bequemlichkeit meistens macht:
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval: interval 
					 target: self 
					selector: @selector(mySelector) 
					userInfo: nil 
					repeats: NO];
Wie gesagt, der wurde nach dem Ruhezustand nie gefeuert. Übergibt man allerdings den Timer "von Hand" an die RunLoop klappts:
NSTimer *timer = [NSTimer timerWithTimeInterval: interval 
					target: self
					 selector: @selector(mySelector) 
					userInfo: nil
					repeats: NO];

[[NSRunLoop currentRunLoop] addTimer: timer 
				forMode: NSDefaultRunLoopMode];
Der Timer wird gefeuert, auch wenn die App zwischenzeitlich im Ruhezustand war, oder der Timer während des Standby hätte feuern sollen. Allerdings "eiert" er dann ein wenig. Das heisst, er feuert nicht mehr präzise. Warum das nun so ist: Keine Ahnung! Eigentlich wird der scheduled Timer auch im DefaultRunLoopMode abgearbeitet. Das sollte theoretisch keinen Unterschied machen. Theoretisch! (iPhone OS 3.1.x)


Seite: 1 von 1


iPhone: NSTimer im Standby