有没有一种方法可以编写NSTimer,使其仅暂停程序一秒钟?

3
尝试更改按钮图片,等待一秒钟,然后再更改回来。 尝试让它工作并不是很成功,所以是否有一种方法可以暂停程序一秒钟,而不需要计时器执行任何操作,并且程序不会继续执行代码?
2个回答

4
尝试将您的“change”代码放入一个方法中,并从您的“change”方法调用该方法:
[self performSelector:@selector(changeBack:) withObject:nil afterDelay:1.0];

有没有一种方法可以将这2个对象作为选择器的参数传递?我找到了一个带有2个withObject:'s的,但是那个没有延迟。 - marty
@marty:将两个对象添加到NSArray中,并将NSArray作为对象传递。 - dreamlax
我更喜欢使用字典,因为它可以轻松地扩展到任意数量的命名参数,并且比数组具有更好的可读性/可维护性。 - Paul Lynch

1

你可以调用

// sleep first appeared in Version 7 UNIX, 1979
sleep(1);

或者,更加现代地说:

// usleep appeared in 4.3 BSD, released 1986
usleep(1000000);

或者,更现代化的说法:

// nanosleep can be found in POSIX.1b, published 1993
struct timespec ts;
ts.tv_sec = 1;
nanosleep(&ts, NULL);

或者,更现代化、更 Cocoa 风格的写法:

// +sleepForTimeInterval first appeared in Mac OS X 10.5, 2007
[NSThread sleepForTimeInterval:1.0];

所有这些都会停止当前线程。如果您的应用程序只有一个线程,那么这意味着它将停止整个应用程序。在休眠期间,它将无响应于任何用户界面事件。
NSObject参考文档显示了一个名为performSelector:withObject:afterDelay:的方法。该方法通过在运行循环中安排它来在指定延迟后执行选择器。这意味着运行循环继续循环并处理事件、触发计时器、清空自动释放池、发送更多预定消息等等。
在这种特殊情况下,最好在运行循环中安排选择器(提供更改图像的选择器并提供一秒钟的延迟)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接