- 浏览: 410703 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (325)
- 神经网络 (1)
- javascript (11)
- 数据结构 (2)
- 计算机图形学 (11)
- 模式识别 (1)
- 前端开发 (14)
- 机器学习 (11)
- ios开发 (50)
- Python (9)
- HTML5 (4)
- 计算机视觉 (9)
- 数字图像处理 (7)
- 架构设计 (19)
- 数据库设计 (9)
- 算法设计 (59)
- Java (37)
- 其他 (3)
- 游戏开发 (5)
- c++ (17)
- Linux (3)
- TCP/IP (2)
- Flex (41)
- 健康 (6)
- AI (2)
- 工具 (1)
- 数据挖掘 (1)
- 性能优化 (6)
- 综合 (2)
- 网络通信 (12)
- Android (2)
- UML (3)
- 软件设计 (11)
- 编程经验 (7)
- J2EE (1)
- 多媒体技术 (3)
- 数学 (7)
- php (4)
- 设计 (1)
- CS (2)
- 计算机理论 (1)
- 信息安全 (1)
最新评论
-
ahead_zhan:
good good good
flex3控件_ModuleLoader -
lonerzf:
好样的。非常感谢楼主
OpenCV视频教程整理 -
lonerzf:
好样的。谢谢~
OpenCV视频教程整理 -
coding1688:
博主说的不错,我在实现瀑布流布局时也用的masonry插件,有 ...
Javascript 瀑布流式布局及其动态效果的实现 -
snowolf:
除非玩游戏,不然没啥win的事情,或者用win的银行客户端,通 ...
macbook安装操作系统的机理分析
转自:http://blog.csdn.net/zhangchu1994/article/details/7286018
Each program runs in at least one thread.
You can think of each thread as a separate process of program execution, each running parallel to the others.
NSthread
If you have some kind of user interface, or other code that needs to listen to events (like network ports), you need a run loop.
Every NSThread automatically gets its own run loop, and you very rarely have to concern yourself with them directly.
The run loop is also in charge of creating and releasing autorelease pools.
[EDIT: See comments for more discussion about autorelease pools.
The most important point to keep in mind is that new threads must take care of setting up an autorelease pool.
For example, methods that are invoked with detachNewThreadSelector (see below) should have the following as their first and last lines:
NSAutoreleasePool *pool = [ [ NSAutoreleasePool alloc ] init ];
[code here]
[pool release];
The same applies for threads spawned(催生了) using other techniques.
In the main thread, where all the UI handling is taking place, the run loop is very important, since it keeps the interface reactive.
That's why you should never run code that's time consuming on the main thread:
it will eat up all time on the thread and the run loop will not be allowed to run often enough, resulting in a locked or slow interface.
If you need to perform time consuming calculations(计算), or keep a task running in the background, you should create a new thread.
Again, you probably don't have to think about the new run loop being created.
An easy way of performing a method in a new thread:
[NSThread detachNewThreadSelector:@selector(theSelector) toTarget:self withObject:nil];
Inter-thread communication can be tricky, and you should be aware of the methodsperformSelector:onThread:withObject:waitUntilDone: andperformSelectorOnMainThread:withObject:waitUntilDone:
(Great tips on sending NSNotifications across threads here.)
NSTimer(Timer是否可以理解为在指定时间后开一个线程)
Timers are also handled by run loops. In contrast to run loops, you are likely to often be using timers directly in your program.
The very easiest way of creating a timer is:
[self performSelector:@selector(aSelector) withObject:nil afterDelay:1.0];
but sometimes you want to create and manage NSTimer objects yourself, for example to be able to cancel and re-use a timer.
NSTask
An NSTask is used to run another program as a subprocess of the current one.
It's a bit similar to starting a separate thread, but if a subprocess crashes, your main program will keep running.
Communication between programs is also very different from communication between several threads in the same process.
You tagged your question with "iphone", and on the iPhone you will never be using NSTasks.
NSOperations
NSOperations are used when you need to handle a larger amount of different tasks, placing them in queues and/or processing them in separate threads (although they don't have to run in separate threads). If your application needs to create just a few, specialized threads, then there is no reason to use the NSOperation class. But if you will routinely generate tasks (like communicating with a server) that must be kept track of, NSOperation and NSOperationQueue will come in handy.
发表评论
-
IVEngine —— Objective-C的Spring
2013-12-15 20:35 0背景: 只要是Java程序员,相信都听说 ... -
XCode环境变量及路径设置
2013-11-17 16:05 1802转自:http://blog.csdn.net/freedo ... -
OVGap — 沟通 Objective-C 与 Javascript
2013-11-14 15:14 824Github 地址: https://github.com ... -
IOS开发常用命令
2013-10-11 10:41 656统计代码行数 打开terminal, cd到项目根目 ... -
提高在Xcode上的工作效率
2013-08-31 11:05 1116转自:http://liuminqian.github.io ... -
把ipa包上传到AppStore
2013-08-26 21:46 937转自:http://doc.appcan.cn/dev_io ... -
iPhone应用程序中App目录结构
2013-08-26 17:30 969转自:http://blog.csdn.net/justin ... -
iOS运行回路(RunLoop)总结
2013-08-05 13:37 754转自:http://www.cocoachina.com/i ... -
Simple iPhone Keychain Access
2013-08-04 15:54 752转自:http://useyourloaf.com/b ... -
IOS媒体层
2013-07-28 15:18 855转自:http://wd397.blog.163.com/b ... -
nginx上搭建HLS流媒体服务器
2013-07-28 13:31 1392转自:http://blog.csdn.net/ ... -
Compile ffmpeg for iOS 6, support Simulator & armv7 & armv7s
2013-07-23 17:03 813转自:http://witcheryne.iteye.co ... -
UITableView 修改编辑模式下的切图
2013-07-14 21:03 1183把以下代码放在点解 “编辑” 按钮时触发的方法中。 ... -
iOS平台UDID方案比较
2013-07-09 20:27 1536转自:http://www.cocoachina.com/b ... -
25 Free iOS Design Resources
2013-05-12 19:08 552Some great designers around th ... -
谈谈iOS Animation
2013-05-07 09:39 619转自:http://geeklu.com/2012/09/a ... -
IOS文件系统的管理
2013-05-06 17:11 642转自:http://blog.csdn.net/zhuzhi ... -
iOS应用的本地缓存机制设计
2013-05-06 16:18 687参考:http://www.cnblogs.com/peng ... -
iOS并发编程指南(3)
2013-04-28 14:37 760转自:http://mobile.51cto.com/iph ... -
iOS运行回路(RunLoop)总结
2013-04-27 23:24 685转自:http://www.cocoachina.com/i ...
相关推荐
介绍您可能已经知道, NSTimer , NSThread和CADisplayLink实例保留其目标。 如果目标也保留这些类之一的实例,则我们有一个保留周期:目标和实例都不会被释放。 您为什么要保留这些类之一的实例? 假设您有某种需要...
`NSTimer`是`NSRunLoop`的一部分,它不直接运行在主线程上,而是依赖于运行循环(`NSRunLoop`)来安排和触发事件。创建`NSTimer`时,我们需要指定间隔时间、重复次数、以及一个selector(方法名),当定时器触发时,...
首先,`NSTimer`是`NSRunLoop`的一部分,它会在运行循环的适当模式下触发。创建`NSTimer`通常使用`scheduledTimerWithTimeInterval`方法,这个方法接受四个参数:时间间隔(interval)、目标(target)、选择器...
5. 展示如何在`NSThread`和`Dispatch Queue`之间切换,以及如何在不同线程的`NSRunLoop`之间传递消息。 通过分析`NSRunLoopTest`的源代码,我们可以学习如何有效地使用`NSRunLoop`、`NSThread`和`Dispatch Queue`来...
CADisplayLink与NSTimer的首要区别在于它们的触发时机。NSTimer可以在应用程序运行的任何时刻触发,而CADisplayLink的触发时机严格受屏幕刷新频率的限制。因此,CADisplayLink通常用于图像绘制或动画等对时间精度...
正确理解和使用`NSTimer`,可以提高用户体验,优化应用性能。在使用过程中,需要注意其生命周期、RunLoop、线程安全和内存管理等问题。通过"ios 时间定时器 NSTimer应用demo",开发者可以深入学习并实践这些概念。
在iOS和macOS开发中,`NSTimer`是苹果提供的一种强大的工具,用于在特定时间间隔后执行某个操作。它是Foundation框架的一部分,适用于Objective-C和Swift开发者。`NSTimer`可以让你的应用程序按照预设的时间间隔执行...
在iOS开发中,`NSRunLoop` 是一个至关重要的概念,它是事件循环(event loop)的核心机制。`NSRunLoopDemo` 提供了关于`...通过学习这个项目,你可以掌握如何有效地使用`NSRunLoop`来提升应用程序的性能和用户体验。
详细讲解CADisplayLink和NSTimer的区别。
在描述的问题中,关键在于如何正确管理和关闭cell中的 `NSTimer`。以下是一些最佳实践: 1. **避免在 `cellForRowAtIndexPath:` 中直接创建 `NSTimer`**:因为这个方法会被频繁调用,每次cell被复用时都会创建新的...
`NSTimer`不是线程安全的,通常在主线程中创建和触发。 二、创建NSTimer的类方法 1. `+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)interval target:(id)target selector:(SEL)aSelector userInfo...
这样就会导致 NSTimer 和 target 之间形成循环引用,无法释放内存。今天,我们将介绍 iOS NSTimer 循环引用的办法,解决这个常见的问题。 NSTimer 循环引用的原因 ------------------------ 在上面的代码中,我们...
1. NSTimer的创建和配置方式。 2. NSTimer的触发回调函数及其参数处理。 3. NSTimer与RunLoop的关系,以及如何确保在正确的RunLoop模式下运行。 4. 如何处理应用进入后台时的定时器暂停问题。 5. 如果源码中有,可能...
`NSTimer`通过调度到一个运行循环(`NSRunLoop`)来实现定时功能。 #### 三、创建NSTimer ##### 1. 基本语法 创建一个`NSTimer`对象的基本语法如下: ```swift let timer = Timer.scheduledTimer(withTimeInterval...
NSTimer-Blocks, 在NSTimer上提供块功能,简单分类 自述文件NSTimer上非常简单的类别,它可以使用块。工作原理我认为如果你使用的是一个块,你可以能不需要将任何用户指定的对象传递到计时器。 你只要从街区里得到你...
`NSTimer`是`NSRunLoop`的一部分,它可以在运行循环中按照预定的时间间隔触发事件。创建一个`NSTimer`通常包括以下几个步骤: 1. **创建定时器**: 使用`+ (NSTimer *)scheduledTimerWithTimeInterval:target:...
在这个项目中,我们关注的是如何利用`UIScrollView`与`UIPageControl`以及`NSTimer`来实现一个自动循环滑动的效果。下面我们将详细探讨这些知识点。 1. **UIScrollView 循环滑动** 在`UIScrollView`中实现循环滑动...
首先,`NSTimer`是`NSRunLoop`的一部分,它可以在指定的时间间隔后调用一个方法。创建`NSTimer`的基本步骤如下: 1. **创建计时器**: 使用`+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)interval ...
注意,添加和移除`NSTimer`都应对应于同一个RunLoop模式。 4. **使用操作队列**:如果你的定时器是在一个自定义的GCD队列上运行,那么可以在适当时候取消队列,这会自动取消所有在队列上的任务,包括定时器。但...