在 NSThread 中运行 NSTimer?

2023-12-01

我正在尝试在应用程序的后台运行计时器,我在应用程序中大量使用计时器,并且我宁愿在后台运行它,但是在尝试释放 NSAoutreleasePool 时出现内存泄漏。我的 Timer 类是单例的,所以如果我启动新计时器,旧计时器就会释放它。

+ (void)timerThread{

    timerThread = [[NSThread alloc] initWithTarget:self selector:@selector(startTimerThread) object:nil]; //Create a new thread
    [timerThread start]; //start the thread
}

//the thread starts by sending this message
+ (void) startTimerThread
{
    timerNSPool = [[NSAutoreleasePool alloc] init];
    NSRunLoop* runLoop = [NSRunLoop currentRunLoop];
    timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(startTime:) userInfo:nil repeats:YES];
    //timer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(startTime:) userInfo:nil repeats:YES];
    //[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
    [runLoop run];
    [timerNSPool release];
}

+ (void)startTime:(NSTimer *)theTimer{

    if(timeDuration > 1)
        timeLabel.text = [NSString stringWithFormat:@"%d",--timeDuration];
    else{
        [self stopTimer];
        [delegate timeIsUp];
    }

}
+ (void) stopTimer{

    if(timer != nil)
    {       
        [timerThread release]; 
        [timeLabel release];
        [timer invalidate];
        timer = nil;
    }

}

我在使用应用程序自动释放池的主线程 runLoop 上运行 NSTimer 从来没有遇到过问题。 我在 [timerNSPool release] 处遇到泄漏; GeneralBlock-16 Malloc WebCore WKSetCurrentGraphicsContext

导致泄漏的原因是从辅助线程更新 UI:

timeLabel.text = [NSString stringWithFormat:@"%d",--timeDuration];

但是我添加了另一个方法 updateTextLbl,然后我使用这个调用它

[self performSelectorOnMainThread:@selector(updateTextLbl) withObject:nil waitUntilDone:YES];

在主线程上。我根本没有泄漏,但这将违背拥有第二个线程的目的。

这是我的第一篇文章,我感谢任何帮助,谢谢......提前......


您正在更新您的 UI+startTime:,但该方法不在主线程中运行。这可能是您看到的 WebCore 警告的来源。

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

在 NSThread 中运行 NSTimer? 的相关文章

  • iPhone5 兼容性标签栏位于屏幕底线上方 88 点

    我通过添加以下内容添加了 iPhone 5 兼容性 电子邮件受保护 cdn cgi l email protection但是 我的应用程序中的选项卡栏并未按预期位于底部 该标签栏是通过 mainWindow xib 中的 tabbarCon
  • 当具有 PagingEnabled 的 UIScrollView 更改页面时如何更新 UIPageControl?

    我该如何做到这一点 以便当用户滚动到 UIScrollView 中的新页面时 UIPageControl 更新 我以前用过这个 看起来效果很好 请务必将 UIScrollView delegate 设置为 self pragma mark
  • 不使用 MFMailComposeViewController 发送邮件

    我想从 iPhone 应用程序发送邮件而不显示MFMailComposeViewController 我还希望从用户的默认邮件帐户发送此邮件 是否有可能做到这一点 iPhone SDK 不支持这一点 可能是因为 Apple 不希望您这样做
  • iPhone - UIWebView 多重锁定

    我在调试器控制台中收到以下错误消息 bool WebTryThreadLock bool 0x7400460 Multiple locks on web thread not allowed Please file a bug Crashi
  • iPhone:OpenGL ES:检测您是否点击了屏幕上的对象(立方体)

    我已经问了一个类似的问题 这让我达到了现在的水平 但我真的需要一些帮助 这是我完成一些很酷的事情的最后一件事 在我看来哈哈 我有一个 3D 世界 我可以在其中移动 这个世界里有简单的立方体 使用函数 CGPoint getScreenCoo
  • UIButton 图像未更改/更新

    首先 我对 Objective C 还很陌生 并且仍在尝试尽可能多地学习 所以请耐心等待 现在我有一个以编程方式创建的 UIButton 按下按钮时 将显示一个 UIActionSheet 其中包含 相机 选择照片 或 取消 选项 然后 按
  • 如何在 iOS 中查找蓝牙音频设备

    好的 我正在开发一个有趣的项目 该项目有一个障碍 我需要为我的 iOS 应用程序启用蓝牙音频支持 我遇到的障碍是我什至无法开始获取已连接的蓝牙音频设备的列表 即使我的 iPhone 5S 可以识别我的耳机 大约 3 4 岁的耳机 LG HB
  • Objective-C:在哪里定义宏以便随处可用?

    我有一个 iOS 应用程序 它在许多视图控制器中使用相同的字符串 数字等 所以我认为最好在一个文件中定义这些常量并在所有视图控制器实现中使用它 优点是更改一个数字 我只需要做一次 而不是在所有视图控制器中都使用该数字 实际上 我的 h 文件
  • NSDictionary 上的 NSPredicate

    我试图根据字母表在表格视图中创建部分 并在这些部分下按字母顺序对我的条目进行排序 我已经收集了 bandArrayIndex 中 bandArray 每个条目的第一个字母 现在我尝试使用 NSPredicate 来计算每个字母有多少个 我正
  • 是否有针对不同屏幕尺寸的单独故事板?

    基本上我已经完成了一个应用程序 我唯一的问题是 ATM 机应用程序在设计时只考虑了 4 英寸显示屏 当在 3 5 英寸模拟器上运行时 应用程序会丢失 0 5 英寸 显然 那么我的问题是 如何在 Xcode 5 中为不同的屏幕尺寸设置不同的故
  • 如何使用 iPhone SDK 实现可滑动的图像堆栈(例如照片应用程序)?

    我想获取一堆图像 或者可能是一组用于下载图像的 URL 并以全屏方式显示它们 一次一个 使用 iPhone SDK 使用用户滑动来平滑地为堆栈中的下一个图像设置动画 Apple 的 Photo app 似乎可以做到这一点 此外 如果尚未检索
  • 从 UIImagePickerController 相机视图推送 viewController

    我正在开发一款消息应用程序 类似于 WhatsApp 用户可以互相发送文本和图像消息 当用户想要发送图像时 他可以从相机胶卷中选择一张图像 也可以用相机拍摄一张图像 这就是我介绍的方式UIImagePickerController对于这两种
  • 网站在 iPhone 屏幕右侧显示空白区域

    我遇到问题http eiglaw com http eiglaw com iPhone 屏幕右侧显示约 25 像素宽的空白 边框 我在 stackoverflow 上研究了这个问题 这些帖子是相关的 但是当我尝试提供的各种解决方案时 我无法
  • XCode 无法将 iPhone 应用程序部署到 iPhone 3GS

    因此 我构建了我的 iPhone 应用程序 它在模拟器中运行良好 因此我想将其部署到我的 iPhone 上进行最后一轮测试 然后再使用我的分发配置文件进行公开 Beta 测试 我已经这样做过很多次了 从来没有出现过问题 然而 自从上次测试运
  • 如何在 Core Data 中存储图像?

    只是猜测 我创建一个属性并将其类型设置为 二进制 但最终我该如何使用它呢 我猜幕后有一个 NSData 那么该属性实际上采用 NSData 吗 这个问题已经被问过很多次了 答案有点复杂 当涉及二进制数据时 您应该根据要使用的数据的预期大小来
  • 使用 iPhone 中的地图视图读取当前位置名称

    我读取了当前位置的纬度和经度值 然后成功将该位置固定在 iPhone 中 现在我想使用这个纬度和经度值读取该地名 我使用以下代码来读取查找当前位置 void mapView MKMapView mapView1 didUpdateUserL
  • 持久化 UINavigationItem 的 rightBarButtonItem 属性

    这可能是一个愚蠢的问题 但是有可能保持正确的吗 UIBarButtonItem跨由一个管理的多个视图UINavigationController 我的一系列观点通常具有相同的权利UIBarButtonItem 但是当我将新视图推送到我的UI
  • 加载新控制器时,iPhone 横向模式切换到纵向模式

    我的应用程序在横向模式下正确启动并且运行良好 BOOL shouldAutorotateToInterfaceOrientation UIInterfaceOrientation interfaceOrientation if interf
  • UIView晃动动画

    我试图在按下按钮时使 UIView 摇动 我正在调整我找到的代码http www cimgf com 2008 02 27 core animation tutorial window shake effect http www cimgf
  • 在 UIScrollview 上显示缩略图的最佳方法是什么(从服务器下载)

    我想在 UIScrollview 如照片应用程序 上显示许多图像 作为缩略图 所有图像将从服务器下载 据我所知 有几种选择 1 通过创建 UIImageviews 然后将它们添加为主滚动视图上的子视图 2 通过子类化一个UIView类 然后

随机推荐

  • ListView 项目的原始坐标

    我有以下问题 在我的布局上 我有一个操作栏 例如 高度为 150dp 其余的是 ListView 我可以从操作栏中获取一些视图并将其拖动到列表视图上 拖动是通过windowsmanager实现的 所以当拖动时我得到原始Y坐标 现在 我想将
  • 在Python中证明傅里叶变换运算

    我有一个时域表达式 f 1j H t exp 1j a b t 可以使用解析傅立叶变换已知属性 H是亥维赛阶跃函数 该 FT 运算的结果是 F w a 1j b w a 2 b 2 where w是频率 现在我正在使用中的提示本文进行数值傅
  • iPhone Codesign 目标文件格式无效或不合适

    我不小心删除了 xcode 中的目标 所以我创建了一个具有完全相同名称的新项目 在目标设置中 我再次选择了正确的代码签名身份 但现在我无法再为该设备进行编译了 一旦我想构建 我就会得到 CodeSign build Release ipho
  • 我可以使用 ADO.Net 实体框架延迟加载标量属性吗?

    我有一个数据库表Image有一根巨大的柱子 Data 我宁愿延迟加载这一列 这样当我获得所有图像的列表时 我就不会查询所有内容 我知道我可以将数据放入其自己的列和实体中 如下所示 但是 我必须这样做吗 是的 我相信你确实必须这样做 我认为
  • 适用于 Excel 2007 和 2010 的 Excel 插件

    我正在编写一个可以在 2007 和 2010 中运行的 Excel 插件 当我使用 Visual Studio 创建新项目时 我需要决定我想要哪个版本 我之前选择了2007 但由于我安装了2010 所以无法调试它 我收到错误 您无法调试或运
  • 使用 JGit 与上次提交进行文件比较

    我正在尝试使用 JGit 来获取文件从上次提交到最近未提交更改的差异 我怎样才能用 JGit 做到这一点 使用命令行的输出是git diff HEAD 经过多次讨论 link1 link2 我附带了一段代码 能够找到未提交的文件 但我无法得
  • 在c#中添加progressBar来查看进程的进度百分比

    这是关于我的流程的代码 StreamReader outputReader null StreamReader errorReader null ProcessStartInfo processStartInfo new ProcessSt
  • Bower安装EACCESS错误

    我尝试从 Bower json bower install 安装依赖项时遇到此错误 但我不知道它是什么或如何修复它 任何帮助将不胜感激 deniz946 UbuntuOS Desktop meanapp client resourcejs
  • Spring boot - 使用动态 TTL 周期驱逐缓存

    从我的微服务 SERVICE A 中 我对另一个微服务 SERVICE B 进行了其余 api 调用以进行登录并获取访问令牌 该 API 将使用该令牌的 TTL 进行响应 我需要缓存令牌 直到 SERVICE B 响应的 TTL 秒 为止
  • XML 解析难题

    更新 我重新设计了这个问题 以显示我所取得的进展 也许可以更容易回答 更新 2 我已向 XML 添加了另一个值 每个 zip 中都提供扩展 每个项目可以有多个由选项卡分隔的项目 所以它的结构将是这样的 平台 gt 分机 子组 gt 名称 g
  • 在android中实现pdf.js从sd卡读取

    我正在尝试为我的 Android 应用程序实现一个 pdf 查看器 它显示 SD 卡中存在的不同 pdf 文件 我正在考虑使用 pdf js 库 我使用了此处发布的代码示例 https bitbucket org butelo pdfvie
  • 在嵌套组件孙子组件和根组件之间发出事件

    I have wheels component嵌套到car component 轮子 组件 export class WheelsComponent Output onLoaded EventEmitter
  • 将参数作为 const 引用与普通引用传递[重复]

    这个问题在这里已经有答案了 可能的重复 为什么非常量引用不能绑定到临时对象 有这样的代码 void fun ref int par void fun const ref const int par int main fun ref 2 er
  • 在 PHP 上使用正则表达式获取 HTML 页面 值和名称

    好的 正如标题所示 我有一个使用 libcurl PHP 内的 cURL 获取的 HTML 页面 该页面有一个 我需要提取 名称和值 我想使用正则表达式来执行此操作 我使用正则表达式来制作它 因为我认为这是更简单的方法 如果您认为我不应该使
  • 为什么 C 允许我调用未声明的函数? [复制]

    这个问题在这里已经有答案了 我有两个文件 test1 c and test2 c 其中包含main 功能 test1 c include
  • 如何在cloud firestore中查询用户之间的匹配项?

    我有以下收藏 likes collection uid document otheruserUID true anotherUID true likedBy collection uid document otheruserUID true
  • 使用 openActiveSession 或 REST API 获取 Facebook 好友列表

    我正在使用最新的 facebook SDK 开发一个 Android 应用程序 并且使用此代码从 facebook 获取一些数据 public void onFBLoginClick View view openActiveSession
  • 启动 Screen.storyboard 无法正常工作 Xcode 7

    我在 Xcode 7 中使用 Launch Screen Storyboard 来支持 iOS 9 并使用 imageSet 来支持 iOS 7 我放的第一件事UIImageView在全屏 LaunchView 中 并在该 imageVie
  • 使用实体框架和 LINQ 的未知列错误

    我昨天开始使用 EF 但将这个简单的查询转换为 EF sintax 时遇到了麻烦 翻译 select a city from offer o address a offer address oa where o identifier oa
  • 在 NSThread 中运行 NSTimer?

    我正在尝试在应用程序的后台运行计时器 我在应用程序中大量使用计时器 并且我宁愿在后台运行它 但是在尝试释放 NSAoutreleasePool 时出现内存泄漏 我的 Timer 类是单例的 所以如果我启动新计时器 旧计时器就会释放它 voi