2010-05-06 25 views

cevap

11

şu gerekenler yapacak:

NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval: 2 
            target:self 
            selector:@selector(handleTimer:) 
            userInfo:nil 
            repeats:NO]; 

Sonra temsilci fonksiyonu:

-(void)handleTimer: (NSTimer *) timer 
{  
    //code 
} 
2

NSTimeInterval - 2.0 saniye ayarlanabilmeli ve bu süreden sonra yanması gerekir. Ne görüyorsun? Zamanlayıcıyı çağırmak için kullandığınız kod nedir?

19
NSTimer kullanılabilir, ancak başka bir seçenek O (bir yöntem çağrısı gibi temelde performSelector:withObject:afterDelay: kullanmaktır

mesaj gönderir) daha sonra gerçekleşir.

bir DoStuff gönderir Bu örnek: Mesaj bir gecikmeden sonra:

-(void)doStuff:(id)sender 
{ 
    /// do something 
} 
8

Ayrıca bazı kullanışlı kodu kullanabilirsiniz: Bu yöntem 2.0 saniye sonra çağrılan almak için neden

[self performSelector:@selector(doStuff:) withObject:self afterDelay:2]; 

NSObject + PerformBlock.h

@interface NSObject (PerformBlock) 

- (void)performBlock:(void(^)(void))block waitUntilDone:(BOOL)wait; 
- (void)performBlock:(void(^)(void))block afterDelay:(NSTimeInterval)delay; 
- (void)performBlock:(void(^)(void))block repeatCount:(NSUInteger)repeatCount timeInteval:(NSTimeInterval)timeInterval; 

@end 

NSObject + PerformBlock.m

@interface NSObject (PerformBlockHidden) 

- (void)performBlock:(void(^)(void))block; 

@end 

@implementation NSObject (PerformBlock) 

- (void)performBlock:(void(^)(void))block { 
    block(); 
} 

- (void)performBlock:(void(^)(void))block waitUntilDone:(BOOL)wait { 
    [self performSelector:@selector(performBlock:) onThread:nil withObject:[[block copy] autorelease] waitUntilDone:wait]; 
} 

- (void)performBlock:(void(^)(void))block afterDelay:(NSTimeInterval)delay { 
    [self performSelector:@selector(performBlock:) withObject:[[block copy] autorelease] afterDelay:delay]; 
} 

- (void)performBlock:(void(^)(void))block repeatCount:(NSUInteger)repeatCount timeInteval:(NSTimeInterval)timeInterval { 
    for (NSInteger repetition = 0; repetition < repeatCount; repetition++) 
     [self performBlock:block afterDelay:(repetition*timeInterval)]; 
} 

@end 

Sonra sadece NSObject + PerformBlock.h içe ve çağrı: Bu kullanmadıysanız

[myObject performBlock:^{ 
    // Code you want to perform after 2secs 
} afterDelay:2]; 
+0

, ama gerçekten böyle bloklarını kullanarak kavramı gibi . –