【发布时间】:2010-07-05 18:12:35
【问题描述】:
谁能告诉我 NSCFTimer 到底是什么?当我向 NSTimer 询问计时器时,我明白了。 我的问题是我正在尝试检查一个对象(假设是一个 NSTimer,请注意“假设”这个词,这就是我要检查的原因)是否是 NSTimer 类的对象,它似乎不起作用。这个“NSCFTimer”是否以任何方式......阻碍了这个过程?
【问题讨论】:
标签: iphone objective-c cocoa class nstimer
谁能告诉我 NSCFTimer 到底是什么?当我向 NSTimer 询问计时器时,我明白了。 我的问题是我正在尝试检查一个对象(假设是一个 NSTimer,请注意“假设”这个词,这就是我要检查的原因)是否是 NSTimer 类的对象,它似乎不起作用。这个“NSCFTimer”是否以任何方式......阻碍了这个过程?
【问题讨论】:
标签: iphone objective-c cocoa class nstimer
NSCFTimer 是 Foundation 和 CoreFoundation 框架的实现细节。它是NSTimer 的子类,因此isKindOfClass: 可以正常工作。
不过,它确实引出了一个问题,即为什么您可能会引用一个可能是也可能不是 Timer 的对象。计时器的唯一来源是您的创建或框架中定义明确的方法。因此,这种不确定性是非典型的,并且通常表明存在潜在的设计问题。
【讨论】:
bbum 说得很好,但更直截了当:据你所知,NSCFTimer 与NSTimer 是一回事,你不必担心。 :)
技术原因: NSTimer 与CFRunLoopTimer 是免费桥接的。当您实例化NSTimer 时,该类中的代码会将您的实例替换为Core Foundation 不透明C 类型CFRunLoopTimer 的实例。 CFRunLoopTimer 在 Objective-C 运行时将自己标识为 NSCFTimer 类的实例,因此 NSTimer 实例的类将报告为 NSCFTimer。
有关免费桥接、Core Foundation 以及您在不知不觉中使用这两者的频率的更多信息,请参阅Apple's documentation。
【讨论】: