当前位置: 首页 > 面试题库 >

NSTimer不会调用私有函数作为选择器

满玉泽
2023-03-14
问题内容

我正在研究要点:PasteboardWatcher.swift,在其中我像这样调用了NSTimer对象:

func startPolling () {
        // setup and start of timer
        timer = NSTimer.scheduledTimerWithTimeInterval(2, target: self, selector: Selector("checkForChangesInPasteboard"), userInfo: nil, repeats: true)
}

checkForChangesInPasteboard函数的定义是:

func checkForChangesInPasteboard() {
        // definition continues..
}

我不想将函数公开checkForChangesInPasteboard给其他类,因此我想将其标记为私有,但是由于某种原因,它抛出以下异常:

-[PasteboardWatcher.PasteboardWatcher checkForChangesInPasteboard]: unrecognized selector sent to instance

如果我不将其标记为私有,那么它会完美运行。

我有什么办法可以将此方法保留为私有方法,对其他类隐藏呢?


问题答案:

根据将 Swift与Cocoa和Objective-C结合使用

“标有private修饰符的声明不会出现在生成的标题中。除非将私有声明也使用@ IBAction,@
IBOutlet或@objc进行显式标记,否则它们不会公开给Objective-C。”

摘自:苹果公司。“将Swift与Cocoa和Objective-C结合使用(Swift 2预发行版)。”
iBooks。https://itun.es/us/utTW7.l

因此,您可以标记函数@objc以获取所需的行为。我只是在其中一个使用公开可见性的应用程序中对此进行了测试,因为我认为Objective-
C根本看不到私有声明,并且在标记为private并用修饰时可以正常工作@objc

我刚刚看到了一个相关的问题:具有目标选择器的Swift访问控制 —基本上是同一件事,但我认为您的表达方式较为笼统,因此不能严格重复。



 类似资料:
  • 我正在尝试制作一个非常简单的微调器,至少如下所示: XML: 爪哇: 我可以看到整个列表,但是一旦我点击一个项目,什么都不会发生,它根本不会显示选择,即使我使用,并且如果我尝试做我得到一个。我试着在网上搜索了很多,但没有一个解决方案似乎对我有帮助...

  • 我正在使用jQuery select2插件并尝试通过Ajax请求显示数据。但它没有调用Ajax函数,我已经尝试了所有方法,但没有成功。这是我的代码- html Javascipt 我使用以下版本 JQuery-2.1.4 选择2-4.0.0 问题是,当我在select2的输入框中键入内容时,它没有调用这个ajax请求来获取数据。有人能帮我吗?

  • 我正在使用一个 DB2 数据库并测试了以下代码:无论方法 B 是否Propagation.REQUIRES_NEW,如果方法 B 有异常,则无论如何,方法 A 的结果都将正确提交。 这与我的假设相反,即必须使用Propagation.REQUIRES_NEW来实现这一目标。 谢谢你@Kayaman我想我现在已经想通了。 我看到的行为是因为methodB的@Transactional注释不起作用,所

  • 5.9. 私有函数 与大多数语言一样,Python 也有私有的概念: 私有函数不可以从它们的模块外面被调用 私有类方法不能够从它们的类外面被调用 私有属性不能够从它们的类外面被访问 与大多数的语言不同,一个 Python 函数,方法,或属性是私有还是公有,完全取决于它的名字。 如果一个 Python 函数,类方法,或属性的名字以两个下划线开始(但不是结束),它是私有的;其它所有的都是公有的。 Py

  • 在很多时候,有些成员函数是在一个类内部才会被调用到,他们不应当被使用这个类的客户代码调用。例如,calculatePolar和calculateCartesianare会被访问函数调用到,但客户代码不应该直接调用他们(虽然不会造成伤害)。如果我们想保护这些函数不被调用到,我们就需要把他们声明为private,正如我们处理变量那样。所以一个完整的复数类的定义如下: class Complex {

  • 这三点都与相同的“空函数”问题有关: 调用空函数时浪费了多少处理时间 重要编辑调用空虚函数是否相同? 编辑SO基本上你都在说在大多数情况下编译器会优化它。 但现在我很好奇,因为这仍然适用于这个问题。如果出现这样的情况,在编译时不知道何时调用空函数,该怎么办?它会立即进入堆栈然后退出吗?