-performSelector:withObject:afterDelay: 如何工作?

2024-06-28

我目前的工作假设是-performSelector:withObject:afterDelay:不使用线程,而是安排一个事件在稍后的日期在当前线程上触发。它是否正确?

进一步来说:

- (void) methodCalledByButtonClick {
  for (id obj in array) {
    [self doSomethingWithObj:obj];
  }
}

static BOOL isBad = NO;
- (void) doSomethingWithObj:(id)obj {
  if (isBad) {
    return;
  }
  if ([obj isBad]) {
    isBad = YES;
    [self performSelector:@selector(resetIsBad) withObject:nil afterDelay:0.1];
    return;
  }
  //Do something with obj
}

- (void) resetIsBad {
  isBad = NO;
}

是否保证-resetIsBad之后才会被调用-methodCalledByButtonClick返回,假设我们正在主线程上运行,即使-methodCalledByButtonClick需要任意长的时间才能完成?


来自docs http://developer.apple.com/iphone/library/documentation/Cocoa/Reference/Foundation/Classes/NSObject_Class/Reference/Reference.html#//apple_ref/occ/instm/NSObject/performSelector:withObject:afterDelay::

调用接收者的方法 这当前线程使用默认的 延迟后模式。

讨论更进一步:

该方法设置一个定时器来执行 当前的 aSelector 消息 线程的运行循环。计时器是 配置为在默认模式下运行 (NSDefaultRunLoopMode)。当计时器 触发,线程尝试出队 来自运行循环的消息和 执行选择器。如果出现则成功 运行循环正在运行并且在 默认模式;否则,定时器 等待直到运行循环进入 默认模式。

由此我们可以回答你的第二个问题。是的,有保证,即使延迟较短,因为当前线程正忙于执行performSelector叫做。当线程返回到运行循环并使选择器出列时,您将从您的methodCalledByButtonClick.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

-performSelector:withObject:afterDelay: 如何工作? 的相关文章

  • Facebook SDK:openActiveSessionWithPermissionscompletionHandler 未调用

    使用我已经实现的 Facebook 代码 BOOL openSessionWithAllowLoginUI BOOL allowLoginUI NSArray permissions NSArray alloc initWithObject
  • 钥匙串组访问权限可在我的现有应用程序之间共享数据

    我在 AppStore 上有很多 iOS 应用程序 现在 对于下一个版本的应用程序 我想为每个应用程序保留一段数据以在 KeyChain 中共享 据我所知 我需要在 Apple 的 KeychainItemWrapper 类中提供相同的 K
  • YouTube 嵌入 AirPlay UIWebView

    我正在开发一个视频应用程序 其中包含来自不同来源的大量视频 应用程序中的选项之一必须是通过电视上的 Airplay 播放视频 为了在我的应用程序中显示 YouTube 视频 我使用 YTPlayerView 它是 YouTube API 的
  • 动态创建的标签被覆盖

    我正在开发一个应用程序 其中我在一个函数中动态添加了 5 个标签 当我回想起相同的函数时 尽管在每次创建时释放了标签 但先前创建的标签上的标签都会被覆盖 for int i 1 i lt array count i CGRect lblfr
  • 如何组合两个可变数组?

    我有一个 iPhone 应用程序 我试图在其中添加两个可变数组 NSMutableArray dataArray NSMutableArray alloc init NSMutableArray dataArray1 NSMutableAr
  • 动画完成后 CABasicAnimation 重置为初始值

    我正在旋转 CALayer 并尝试在动画完成后将其停止在最终位置 但动画完成后 它会重置到初始位置 xcode 文档明确指出动画不会更新属性的值 任何如何实现这一目标的建议 这就是答案 它是我的答案和克里希南的答案的结合 cabasican
  • Objective C - CAGradientLayer 覆盖 UILabel 中的文本?

    我正在尝试添加一个渐变层到我的UILabel由于某些原因CAGradientLayer覆盖我的文字 我做错了什么吗 void viewDidLoad super viewDidLoad CAGradientLayer gradient CA
  • NSManagedObject 托管对象之外的子类作为普通对象

    我有一个实体对象 Country 其中包含国家 地区名称和国家 地区代码 它是 NSManagedObject 的子类 我将它与核心数据模型一起使用 将其值存储到持久存储中 我有一个地方 相同的国家 地区对象将用作普通对象 即我将使用它来存
  • 如何使用 NSMutableArray 中的数据通过 NSUserDefaults 保存数据

    My NSMutableArray在我的 h 文件中声明如下 property strong nonatomic NSMutableArray numbers 如何使用 NSMutableArray 保存输入的数据以保存到NSUserDef
  • iOS 7 仅横向应用程序无法访问照片库

    我有一个仅限风景的应用程序 每当我访问照片库时 应用程序就会崩溃 因为UIImagePickerViewController正在尝试以纵向模式加载 应用程序在 iOS 5 和 6 中运行良好 我收到以下错误 由于未捕获的异常而终止应用程序
  • LocalNotifications 的振动和声音

    如何向本地通知添加振动和声音 code UILocalNotification notification UILocalNotification alloc init NSDate firedate settime date notific
  • 来自应用程序的 Apple TV 上的 AirPlay 元数据 (AVPlayer - MPVolumeView)

    我的应用程序成功通过 AVPlayer 传输 MP3 我实现了一个 MPVolumeView 来引入 AirPlay 支持 效果很好 但我注意到我的苹果电视上的标题信息没有显示流式 MP3 中的任何内容 而只是显示 未知 信息 是否有办法从
  • Monotouch PInvoke System.EntryPointNotFoundException

    我使用 monotouch 将一些 C 代码嵌入到 iPhone Objective C 应用程序中 我能够调用 C 代码并获取返回值 但无法使用 PInvoke 从 C 代码调用 C 函数 我正在尝试让一个简单的例子起作用 这是一个简单的
  • 什么是 Core Audio 错误 561015905?为什么当我使用锁定按钮时会发生这种情况?

    自从升级到 iOS 10 和 Xcode 8 以来 每当我使用锁定按钮关闭屏幕时 我的 iOS 应用程序就会抛出错误并崩溃 错误是 由于未捕获的异常 com apple coreaudio avfaudio 而终止应用程序 原因 错误 56
  • 突出显示 PDF 文档 iPhone xcode 中的文本

    嗨朋友们 我正在使用 Web 视图开发一本电子书 我正在使用 PDF 文档加载 Web 视图 现在我想开发搜索功能 但我不明白如何实现它 所以请给我一个解决方案 提前致谢 而不是使用UIWebView 您可能想考虑使用 Quartz 2DC
  • iPhone 强制旋转

    我已经阅读了大量关于轮换的内容 但没有找到我的查询的解决方案 开始 我的选项卡中有一个带有选项卡栏和隐藏导航控制器的纵向应用程序 在应用程序中的某个时刻 下一个视图必须是横向视图 XIB 布局是横向完成的 因此我想在没有任何翻译或像素移动代
  • 图像持久化和延迟加载与 Dispatch_Async 的冲突

    我正在开发一个提要阅读器 我通过使用 nsxmlparser 解析 rss 提要来完成它 我还有从 CDATA 块中获取的缩略图对象 void parser NSXMLParser parser foundCDATA NSData CDAT
  • 检测图像中的特定对象,即使用 opencv 进行图像分割

    我必须选择 iPhone 上图像中可见的任何特定对象 基本上我的项目是根据我的触摸来分割图像对象 我遵循的方法是首先检测图像的轮廓 然后根据手指触摸选择特定序列 有没有其他方法更强大 因为我必须在视频帧上运行它 我在该项目中使用 OpenC
  • 如何重命名 MacOS/X 程序中的程序名称菜单标签?

    我有一个在 MacOS X 下运行的基于 Qt 的 GUI 程序 我希望能够更改该程序的第一个菜单标题的标签 即此屏幕截图中用红色圈出的标签 有没有一种编程方法可以做到这一点 假设不存在基于 Qt 的解决方案 则 Objective C 本
  • CAltimeter 回调永远不会触发

    使用我的 6 我一直在尝试使用 CoreMotion 的新 CMAltimeter 读取相对高度和压力 但是回调永远不会触发 我有一个非常相似的设置 它使用加速度计 陀螺仪和磁力计 他们似乎都工作得很好 想知道是否有人设法阅读 void v

随机推荐