gpt4 book ai didi

iPhone 开发者--performSelector :withObject:afterDelay or NSTimer?

转载 作者:行者123 更新时间:2023-12-03 18:30:44 24 4
gpt4 key购买 nike

要每x秒重复一次方法调用(或消息发送,我猜合适的术语是),最好使用NSTimer(NSTimer的scheduledTimerWithTimeInterval:target:selector:userInfo:repeats: )或者让该方法在最后递归地调用自身(使用performSelector:withObject:afterDelay)?后者不使用对象,但可能不太清晰/可读?另外,只是为了让您了解我在做什么,它只是一个带有标签的 View ,该标签倒计时到午夜 12:00,当它达到 0 时,它会闪烁时间 (00:00:00)并永远播放嘟嘟声。

谢谢。

编辑:另外,重复播放 SystemSoundID(永远)的最佳方式是什么?编辑:我最终用它来永远播放 SystemSoundID:

// 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

似乎工作正常..对于闪烁的标签,我想我会使用 NSTimer。

最佳答案

计时器更适合严格定义的时间间隔。如果您的函数调用本身有延迟,您将失去准确性,因为它没有真正同步到时间间隔。运行实际方法本身总是需要时间,这会导致间隔消失。

我想说,坚持使用 NSTimer。

关于iPhone 开发者--performSelector :withObject:afterDelay or NSTimer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1490028/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com