iPhone dev - performSelector: withObject: afterDelay o NSTimer?

Para repetir una llamada de método (o un mensaje enviado, supongo que el término apropiado es) cadax segundos, ¿es mejor usar un NSTimer (NSTimer scheduleTimerWithTimeInterval: target: selector: userInfo: repeats :) o hacer que el método se llame al final de forma recursiva (usando performSelector: withObject: afterDelay)? ¿Este último no usa un objeto, pero quizás es menos claro / legible? Además, solo para darte una idea de lo que estoy haciendo, es solo una vista con una etiqueta que cuenta hasta las 12:00 de la medianoche, y cuando llegue a 0, parpadeará la hora (00:00:00) y suena un pitido para siempre.

Gracias.

Edición: también, ¿cuál sería la mejor manera de reproducir repetidamente un SystemSoundID (para siempre)? Edición: Terminé usando esto para jugar el SystemSoundID por siempre:

// Utilities.h
#import <Foundation/Foundation.h>
#import <AudioToolbox/AudioServices.h>


static void soundCompleted(SystemSoundID soundID, void *myself);

@interface Utilities : NSObject {

}

+ (SystemSoundID)createSystemSoundIDFromFile:(NSString *)fileName ofType:(NSString *)type;
+ (void)playAndRepeatSystemSoundID:(SystemSoundID)soundID;
+ (void)stopPlayingAndDisposeSystemSoundID;

@end


// Utilities.m
#import "Utilities.h"


static BOOL play;

static void soundCompleted(SystemSoundID soundID, void *interval) {
    if(play) {
        [NSThread sleepForTimeInterval:(NSTimeInterval)interval];
        AudioServicesPlaySystemSound(soundID);
    } else {
        AudioServicesRemoveSystemSoundCompletion(soundID);
        AudioServicesDisposeSystemSoundID(soundID);
    }

}

@implementation Utilities

+ (SystemSoundID)createSystemSoundIDFromFile:(NSString *)fileName ofType:(NSString *)type {
    NSString *path = [[NSBundle mainBundle] pathForResource:fileName ofType:type];
    SystemSoundID soundID;

    NSURL *filePath = [NSURL fileURLWithPath:path isDirectory:NO];

    AudioServicesCreateSystemSoundID((CFURLRef)filePath, &soundID);
    return soundID;
}

+ (void)playAndRepeatSystemSoundID:(SystemSoundID)soundID interval:(NSTimeInterval)interval {
    play = YES
    AudioServicesAddSystemSoundCompletion(soundID, NULL, NULL,
                                          soundCompleted, (void *)interval);
    AudioServicesPlaySystemSound(soundID);
}

+ (void)stopPlayingAndDisposeSystemSoundID {
    play = NO
}

@end

Parece que funciona bien ... Y para el parpadeo de la etiqueta, usaré un NSTimer, supongo.

Respuestas a la pregunta(3)

Su respuesta a la pregunta