La siguiente es mi categoría Objective-C en NSTimer para hacer disparos basados en bloques de NSTimers. No puedo ver nada malo con eso, pero lo que obtengo es que el bloque que paso al método schedule...
está siendo desasignado a pesar de que llamé al copy
.NSTimer con bloque - ¿Lo estoy haciendo bien?
¿Qué me estoy perdiendo?
typedef void(^NSTimerFiredBlock)(NSTimer *timer);
@implementation NSTimer (MyExtension)
+ (void)timerFired:(NSTimer *)timer
{
NSTimerFiredBlock blk = timer.userInfo;
if (blk != nil) {
blk(timer);
}
}
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)seconds
repeats:(BOOL)repeats
callback:(NSTimerFiredBlock)blk
{
return [NSTimer scheduledTimerWithTimeInterval:seconds
target:self
selector:@selector(timerFired:)
userInfo:[blk copy]
repeats:repeats];
}
@end
Creo '(nulo) timerFired: (NSTimer *) timer' debe ser un método de instancia' -', no un método de clase '+'. Lo mismo probablemente se aplica a 'scheduledTimerWithTimeInterval', pero estoy menos seguro de eso. – dasblinkenlight
Ese no sería el caso. Los métodos programados de NSTimer son métodos de clase. – user1175914
Pasando 'self' ya que el objetivo sugiere fuertemente un método de instancia. Todos los ejemplos de código de 'NSTimer' que he visto también usan métodos de instancia para selectores. – dasblinkenlight