【问题标题】:How does performSelector:withObject:afterDelay: work?performSelector:withObject:afterDelay: 如何工作?
【发布时间】:2012-02-12 19:50:36
【问题描述】:

我发现在调用[self performSelector:@selector(method1:) withObject:self.tableView afterDelay:3]; 之后self.tableViewretainCount 发生了变化?为什么?

非常感谢!

【问题讨论】:

    标签: ios release retain retaincount performselector


    【解决方案1】:

    我相信您的表格视图的保留可能会增加,因为调用performSelector: withObject: afterDelay: 会保留参数,以便在最终执行方法时它不会消失。文档here

    【讨论】:

    • 嗨,Rickay,非常感谢!现在,我知道这个问题了。调用performSelector: withObject: afterDelay:时,将保留参数。当performSelector: withObject: afterDelay:完成时,将释放参数,所以,最终,参数的保留计数没有变化!非常感谢!
    • 正确。很高兴听到你把它理顺了!另外,欢迎来到 Stack Overflow!如果有人的回答对你有帮助,请务必采纳;这样人们就知道什么有效,什么无效。祝 Stackoverflow 愉快!
    【解决方案2】:

    您不必担心 - tableView 将在选择器等待执行时保留,然后在执行后再次自动释放。这不会导致泄漏或崩溃。

    【讨论】:

    • 嗨,尼克洛克伍德,非常感谢!你说的对!我刚刚测试过!但是我有一个新问题!那就是performSelector:withObject:afterDelay:inModes:,模式是什么?如何使用?能不能给我解释一下!非常感谢!
    • inModes 控制它在运行循环中获得的优先级。运行循环基本上是 iPhone 必须每 60 秒执行一次的队列。它包括处理触摸输入、进行网络调用、触发计时器、重绘屏幕等内容。当您说 performSelectorAfterDelay 时,您正在添加操作系统必须在其运行循环中跟踪的另一件事。该模式控制它如何优先考虑它的其他任务。默认值适用于大多数用途。
    • 非常感谢!从你的回答中我对这个问题有了更多的了解。
    猜你喜欢
    • 1970-01-01
    • 2013-06-02
    • 2011-02-21
    • 1970-01-01
    • 2012-11-08
    • 1970-01-01
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多