使用 NSTimer 传递原始参数的正确方法

2024-05-01

我正在使用一个调用此方法的基本计时器:

- (void) refresh:(id)obj
{
    if (obj == YES) doSomething;
}

我想从代码的某些区域以及计时器调用此方法

[NSTimer scheduledTimerWithTimeInterval:refreshInterval
                            target:self
                            selector:@selector(refresh:) 
                            userInfo:nil 
                            repeats:YES];

当我把YES作为论证userInfo参数,我得到一个EXC_BAD_ACCESS错误;为什么是这样?

有人可以帮助我以正确的方式做到这一点,这样就不会有丑陋的选角之类的吗?


The userInfo参数必须是一个对象;它被输入id. YES是一个原语,即值1。为了确保userInfo对象不会被释放,计时器会保留它。所以,当你通过YES, NSTimer 正在做[(id)YES retain]。在您自己的代码中尝试一下,看看会发生什么。 :-P

As the 文档 http://developer.apple.com/iphone/library/documentation/cocoa/reference/foundation/Classes/NSTimer_Class/Reference/NSTimer.html#//apple_ref/occ/clm/NSTimer/scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:状态,你给方法的选择器必须有签名

- (void)timerFireMethod:(NSTimer*)theTimer

这意味着你不能让 NSTimer 调用任何方法——至少不能直接调用。您可以使用上述签名创建一个特殊方法,该方法反过来会调用您想要的任何方法。

所以,假设你有一个名为refresh:,并且您想经常调用它,传递它YES。你可以这样做:

// somewhere
{
    [NSTimer scheduledTimerWithTimeInterval:refreshInterval
                                     target:self
                                   selector:@selector(invokeRefresh:)
                                   userInfo:nil
                                    repeats:YES];
}

- (void)invokeRefresh:(NSTimer *)timer {
    [self refresh:YES];
}

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

使用 NSTimer 传递原始参数的正确方法 的相关文章

  • UISlider不会自动重绘

    我的应用程序上有一个 UISlider 有时我不仅需要更新它的值 还需要更新它的minimumValue 值已更改 但如果我调用 setValue 方法或为滑块分配新值 它会具有新值 但滑块不会将自身重新绘制到该新值应有的位置 我怎样才能重
  • 与新 Apple Music 应用程序中相同的动态状态栏

    是否可以动态着色statusBar这是在新的苹果音乐应用程序 Edit iOS 8 4 中的新 Apple Music 应用程序具有此功能 打开应用程序 选择并播放歌曲 状态栏为白色 向下滑动播放器控制器以查看 我的音乐 控制器 它有黑色状
  • 如何编辑应用程序包中的文件?

    在我的应用程序中 我从存储在捆绑资源中的 CSV 文件加载数据 但是 我希望能够在用户点击 更新 按钮时以编程方式更新此文件 有没有办法以编程方式更改应用程序包中的资源 这是我用来访问该文件的代码 NSString path NSBundl
  • removeItemAtPath 完成

    我正在以这种方式删除路径上的文件 UIPanGestureRecognizer gesture UIPanGestureRecognizer sender UIButton button UIButton gesture view UIPa
  • 检查 Objective-C 块类型?

    这主要是出于好奇 我不太确定它的实际用途是什么 但就这样吧 由于块也是 Objective C 对象 是否可以检查它们的类型 也就是说 它是否响应isKindOfClass 消息以及如何使用该消息来处理块 我天真的以为事情大概是这样的 vo
  • 如何将自定义 C 代码放入 SwiftPM 包中?

    我正在尝试将 C 代码打包到 Swift 模块中 我们称之为CModule 一旦我将其放入项目的基本文件夹中 Swift模块 并配置了搜索路径 我可以在 Swift 文件中自动完成工作 并检测错误 警告 问题是 导入时它无法识别该模块 并且
  • WiFi 网络变化是否有 NSNotificationCenter 通知?

    我想在我的 Cocoa 应用程序中订阅 WiFi 网络更改 但我无法找到合适的事件来订阅 WiFi 网络变化是否有 NSNotificationCenter 通知 据我所知 我会用CoreWLAN https developer apple
  • iPhone Twitter SDK 与 iOS 5 设备的集成问题

    我已成功将 Twitter Sharekit 与我的 iPad 应用程序源集成 当我在模拟器和装有 iOS 4 X 的 iPad 1 上测试该应用程序时 它运行完美 并且成功发布了推文 但是 如果我在装有 iOS 5 的 iPad 2 上安
  • 如何清除代码中的 NSLog 输出?

    有没有办法清除代码中的控制台输出 thanks 我喜欢的快捷方式 Simply USE K Keyboard Shortcut when you want to clear the NSLOG Data
  • 重叠的装载机圆

    我试图重现苹果为应用程序 活动 制作的重叠圆圈 见下图 如果您使用标准贝塞尔路径 起始 结束位置将仅在 0 到 2PI 之间产生影响 例如 如果您尝试填充 4PI 即使使用一些阴影 则无法模拟重叠加载 如何制作类似于苹果解决方案的东西来创建
  • 如何解决malloc_error_break?

    我在 iOS 3 0 模拟器上遇到此错误 但在 3 1 3 和 3 2 模拟器上没有遇到此错误 创建符号断点后malloc error break 我在日志中看到了这一点 Session started at 2010 02 13 19 1
  • AVCaptureDevice 找不到任何设备

    这行代码是我今天遇到的问题 macOS 应用程序 NSArray devices AVCaptureDevice devicesWithMediaType AVMediaTypeVideo 我更新Xcode后 系统总是让我空着devices
  • 如何为 NSAttributedString 内的文本设置“隐藏”属性?

    我有一个 Cocoa 应用程序NSTextView控件将其文本保存在NSAttributedString 实际上我相信这是一个NSMutableAttributedString 我可以轻松地在该字符串内的不同字符范围上设置和修改不同的文本属
  • NSTimer 不触发选择器

    在带有 ARC 的 ios5 0 中 在我的 rootviewcontroller 中 我调用由应用程序委托持有的安全管理器对象中的方法 在该方法中 我设置计时器如下 NSTimer timer NSTimer scheduledTimer
  • 如何用图片替换UITableView?

    我有一个 UITableView 默认为空白 直到用户编辑并向其添加数据 我想显示一张带有说明的图像 直到用户编辑它为止 图片的大小非常适合导航栏和标签栏之间 有没有办法以编程方式执行此操作 您可以使用removeFromSuperview
  • iPhone UINavigationBar 使用 [UINavigationBar 外观] 更改所有控制器的字体样式

    我知道我可以单独更改导航栏的字体 如本答案所述 更改导航栏的字体 https stackoverflow com questions 5832036 change the navigation bars font 目前我正在使用一种更全局的
  • 如何解决 CoreData mogenerator 未找到问题

    我收到如下所示的错误 我不知道我错过了什么 我该如何解决这个问题 如下图所示 Users nischalhada Documents XcodePro mnepalnews revisited 2 0 CoreData mogenerato
  • 确定 Objective-C 方法在运行时是否是可变的

    有没有办法在运行时找出给定方法是否是可变参数类型 就像是method getTypeEncoding 这不会告诉我一个方法是否接受可变数量的参数 或者有什么技巧可以告诉我们吗 罗伯特的评论是正确的 考虑 interface Boogity
  • 推入 UINavigationController 时隐藏 FBFriendPickerViewController 导航栏

    介绍一个实例FBFriendPickerViewController using presentViewController animated completion 非常简单 该类似乎是针对该用例的 但是 我想推送一个实例FBFriendP
  • UIScrollView - 启用分页后,我可以“更改”页面宽度吗?

    将滚动视图 将 pagingEnabled 设置为 YES 将页面宽度设置为滚动视图边界以外的其他值的最简单方法是什么 让我举个例子 假设我有一个包含 10 个项目的滚动视图 每个项目的宽度为 150 像素 而我的滚动视图的宽度为 300

随机推荐

  • PayPal API 监听器网站支付标准 URI

    PayPal IPN 指南文档说得很清楚 将请求发布到 www paypal com 或 www sandbox paypal com 具体取决于您是要在沙盒中上线还是测试您的侦听器 等待 PayPal 的响应 该响应要么已验证 要么无效
  • 在 MVC 中重用 WPF ViewModel 是否可行?

    我们有一个用 WPF WCF 编写的富客户端应用程序 并打算在 ASP net 中创建一个配套网站 如果可能 使用 MVC 我被要求弄清楚我们当前的代码库中有多少是可以重用的 由一个单独的团队 而且我对 ASP net 几乎没有经验 我们将
  • CSS 中的圆帽下划线

    你能用 CSS 制作圆形下划线 如上图所示 吗 如何 有没有办法做到这一点border bottom border radius相反 会产生这种时尚的效果 编辑 我误解了皮克想要什么 但这应该有效 test font size 50px b
  • 根据条件过滤数据集

    我正在使用 asp net 2 0 和 c 我有一个数据集 正在获取员工信息 现在我想根据用户在搜索文本框中输入的名称来过滤网格视图 我正在这样做 DataSet ds new DataSet EmployeeInformation loa
  • 使用VBA从Zip中删除一些特定文件[重复]

    这个问题在这里已经有答案了 在完整的宏观过程中 我正在创建一个Zip的文件Folder 该文件夹有多个子文件夹和文件 使用此代码 Dim oApp As Object NewZip s path acc name zip Set oApp
  • ORA-02289: 序列不存在,hibernbate 中出错

    ORA 02289 序列不存在 hibernbate 中出错 在 Oracle 中 您无法自动生成值 您应该创建一个序列 我们称之为 VEHICLE SEQ 然后你应该把这个注释放在你的 id 上 GeneratedValue strate
  • 在 fork() 之后寻求有关“文件描述符”的简单描述

    Unix 环境中的高级编程 第二版 作者 W Richard Stevens 第 8 3 节 fork 函数 描述如下 父级和子级共享相同的文件偏移量非常重要 考虑一个分叉子进程 然后等待子进程完成的进程 假设两个进程都写入标准输出作为其正
  • 使用选择器获取最接近的父元素(不包括当前元素)

    我正在尝试获取元素的最接近的父元素 看着 closest https developer mozilla org en US docs Web API Element closest 如果选择器与元素匹配 它似乎会返回元素本身 Closes
  • WEBHID API:条形码扫描仪未触发输入报告

    我几乎使用 Nintendo Switch Joy Con 控制器演示 我对其进行了一些修改以使其与我的条形码扫描仪一起使用 它就是行不通 如果行得通 则每 100 次站点刷新就会工作一次 console log text gt log t
  • 如何将 Mercurial 存储库克隆到已存在的目录中?

    我有一个客户的 Django 项目 正在本地开发 使用 Mercurial 进行版本控制 我将本地存储库推送到我的个人远程服务器 我保存所有项目的地方 然后当我部署它时 在任何 Web 服务器上 我从我的个人服务器克隆该存储库 这在大多数服
  • 作为颜色表示的值

    将值转换为颜色是众所周知的 我确实理解以下两种方法 在改变 RGB 颜色值来表示一个值 https stackoverflow com questions 1423925 changing rgb color values to repre
  • 如何从控制器 Symfony2 内部访问不同的控制器

    我需要从另一个控制器内的不同控制器访问方法 我该怎么做 我可以用吗this gt get method 我可以将控制器包含在当前控制器中并创建它的对象并通过该对象访问该方法吗 这样做 可以 吗 我想调用另一个控制器的表单方法 newActi
  • 找不到 build.xml (Android)

    我一直在寻找这个问题的答案有一段时间了 但我似乎找不到它 我通过 perfoce 移动了 NeBeans Android 项目 现在出现以下错误 ZYAndroidAPP build xml 81 Cannot find F Program
  • 我应该如何处理 Android 应用程序中 http post 的服务器超时和错误代码响应?

    我的 Android 应用程序会向 URL 发送 http 帖子 例如http example com 电子邮件受保护 http example com abc php email abc xyz com因此 Android 应用程序基本上
  • 在哪里可以找到所有 HQL 关键字的列表?

    在哪里可以找到所有 HQL 关键字的列表 在完整的 Hibernate 源代码下载中 有一个grammar hql g文件 这是ANTLR http www antlr org 语言定义 您可以从官方GitHub源码仓库查看该文件的最新版本
  • ImageDataGenerator 预测类 - 为什么预测未正确从概率转换为预测类?

    我有一个这样设置的目录 images val class1 class2 test all classes train class1 class2 每个目录中都有一组图像 我想预测测试中的每个图像是否属于 1 类或 2 类 我写这个是为了读
  • 如何在firebase云函数中添加时间戳

    我正在尝试添加Timestamp在有关 Firebase Cloud 功能的 Firestore 文档中 我曾尝试过firestore Timestamp fromDate new Date 但它不起作用 const functions r
  • 使用 zsh 在终端中启动 Sublime Text 3

    我最近购买了一台新 MacBook 我正在尝试重新配置我的系统 该应用程序位于应用程序文件夹内 名称为 Sublime Text app 我已经通过我在网上找到的其他建议编辑了 sublime plugin zsh 文件到 Sublime
  • 使用 django-import-export 通过 url 将外键 id 传递到导入的 csv 文件

    我尝试使用 django import export 和外键 位置 将一些数据从 csv 文件导入到 django 数据库 我想要实现的是 location id 由请求网址传递 value datetime location 4 46 2
  • 使用 NSTimer 传递原始参数的正确方法

    我正在使用一个调用此方法的基本计时器 void refresh id obj if obj YES doSomething 我想从代码的某些区域以及计时器调用此方法 NSTimer scheduledTimerWithTimeInterva