- 浏览: 665438 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
lizaochengwen:
网络请求碰到的中文乱码使用encodeURL吧- (NSStr ...
iPhone开发/iPad开发 中文乱码问题 -
hhb19900618:
还是没弄懂怎么解决了中文乱码? 正确代码能重写贴出吗
iPhone开发/iPad开发 中文乱码问题 -
zhengjj_2009:
我的理解是讲ipa文件解压缩之后再重新打包,已经破坏了签名,所 ...
xcodebuild和xcrun实现自动打包iOS应用程序 -
zhengjj_2009:
我参考你的“ 从ipa格式的母包生成其它渠道包的shell脚本 ...
xcodebuild和xcrun实现自动打包iOS应用程序 -
同一片天空:
问题果然解决了
iOS 搭建 XMPP实现环境
如果你在非main thread中运行run loop,你必须至少为该run loop添加一个input sources或timer。如果你运行的run loop没有监控任何的输入源,该run loop将在你运行后立即退出。
Run loop observer
使用detachNewThreadSelector:toTarget:withObject:创建一个thread:
view plain
[NSThread detachNewThreadSelector:@selector(observerRunLoop) toTarget:self withObject:nil];
在新thread的run loop中添加observer:
view plain
启动run loop
启动run loop的方法:无条件启动,设置时间限制启动,在特殊的模式下启动。
以无条件模式进入run loop是最简单的选择,但并不是最好的选择。以无条件的形式运行run loop将使thread进入一个永久的循环,这样的操作会使用户很难对run loop进行控制。你可以为该run loop添加input source或timer,但能退出该run loop的方法就是kill。这种启动情况下并不能让run loop运行于自定义模式中。
不同于无条件方式运行run loop,使用时间限制的方式启动run loop更好。当你使用超时时间来对run loop的运行加以限制,则run loop一直运行直至事件到达或达到超时时间。如果是事件到达,run loop将事件分发给handler(处理器)进行处理并在处理完成后退出。你的代码然后重启run loop来处理下一个事件。如果是因到达超时时间而退出,you can simply restart the run loop or use the time to do any needed housekeeping。
除了超时时间,你还可以运行run loop在特定的模式下。模式和超时时间并不互斥,你可以在启动一个run loop时同时指定超时时间和模式。模式限制了投递事件给run loop的sources的类型,详细的见“iphone——NSRunLoop概念”。
退出run loop
退出run loop的方法:以超时时间配置run loop启动,显式的停止run loop(调用CFRunLoopStop函数)。
Run loop observer
使用detachNewThreadSelector:toTarget:withObject:创建一个thread:
view plain
[NSThread detachNewThreadSelector:@selector(observerRunLoop) toTarget:self withObject:nil];
在新thread的run loop中添加observer:
view plain
- (void)observerRunLoop { //建立自动释放池 NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; //获得当前thread的Run loop NSRunLoop *myRunLoop = [NSRunLoop currentRunLoop]; //设置Run loop observer的运行环境 CFRunLoopObserverContext context = {0, self, NULL, NULL, NULL}; //创建Run loop observer对象 //第一个参数用于分配observer对象的内存 //第二个参数用以设置observer所要关注的事件,详见回调函数myRunLoopObserver中注释 //第三个参数用于标识该observer是在第一次进入run loop时执行还是每次进入run loop处理时均执行 //第四个参数用于设置该observer的优先级 //第五个参数用于设置该observer的回调函数 //第六个参数用于设置该observer的运行环境 CFRunLoopObserverRef observer = CFRunLoopObserverCreate(kCFAllocatorDefault, kCFRunLoopAllActivities, YES, 0, &myRunLoopObserver, &context); if (observer) { //将Cocoa的NSRunLoop类型转换成Core Foundation的CFRunLoopRef类型 CFRunLoopRef cfRunLoop = [myRunLoop getCFRunLoop]; //将新建的observer加入到当前thread的run loop CFRunLoopAddObserver(cfRunLoop, observer, kCFRunLoopDefaultMode); } //Creates and returns a new NSTimer object and schedules it on the current run loop in the default mode [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(doFireTimer:) userInfo:nil repeats:YES]; NSInteger loopCount = 10; do { //启动当前thread的loop直到所指定的时间到达,在loop运行时,run loop会处理所有来自与该run loop联系的input source的数据 //对于本例与当前run loop联系的input source只有一个Timer类型的source。 //该Timer每隔0.1秒发送触发事件给run loop,run loop检测到该事件时会调用相应的处理方法。 //由于在run loop添加了observer且设置observer对所有的run loop行为都感兴趣。 //当调用runUnitDate方法时,observer检测到run loop启动并进入循环,observer会调用其回调函数,第二个参数所传递的行为是kCFRunLoopEntry。 //observer检测到run loop的其它行为并调用回调函数的操作与上面的描述相类似。 [myRunLoop runUntilDate:[NSDate dateWithTimeIntervalSinceNow:1.0]]; //当run loop的运行时间到达时,会退出当前的run loop。observer同样会检测到run loop的退出行为并调用其回调函数,第二个参数所传递的行为是kCFRunLoopExit。 loopCount--; } while (loopCount); //释放自动释放池 [pool release]; } 设置observer的回调函数: view plain void myRunLoopObserver(CFRunLoopObserverRef observer, CFRunLoopActivity activity, void *info) { switch (activity) { //The entrance of the run loop, before entering the event processing loop. //This activity occurs once for each call to CFRunLoopRun and CFRunLoopRunInMode case kCFRunLoopEntry: NSLog(@"run loop entry"); break; //Inside the event processing loop before any timers are processed case kCFRunLoopBeforeTimers: NSLog(@"run loop before timers"); break; //Inside the event processing loop before any sources are processed case kCFRunLoopBeforeSources: NSLog(@"run loop before sources"); break; //Inside the event processing loop before the run loop sleeps, waiting for a source or timer to fire. //This activity does not occur if CFRunLoopRunInMode is called with a timeout of 0 seconds. //It also does not occur in a particular iteration of the event processing loop if a version 0 source fires case kCFRunLoopBeforeWaiting: NSLog(@"run loop before waiting"); break; //Inside the event processing loop after the run loop wakes up, but before processing the event that woke it up. //This activity occurs only if the run loop did in fact go to sleep during the current loop case kCFRunLoopAfterWaiting: NSLog(@"run loop after waiting"); break; //The exit of the run loop, after exiting the event processing loop. //This activity occurs once for each call to CFRunLoopRun and CFRunLoopRunInMode case kCFRunLoopExit: NSLog(@"run loop exit"); break; /* A combination of all the preceding stages case kCFRunLoopAllActivities: break; */ default: break; } }
启动run loop
启动run loop的方法:无条件启动,设置时间限制启动,在特殊的模式下启动。
以无条件模式进入run loop是最简单的选择,但并不是最好的选择。以无条件的形式运行run loop将使thread进入一个永久的循环,这样的操作会使用户很难对run loop进行控制。你可以为该run loop添加input source或timer,但能退出该run loop的方法就是kill。这种启动情况下并不能让run loop运行于自定义模式中。
不同于无条件方式运行run loop,使用时间限制的方式启动run loop更好。当你使用超时时间来对run loop的运行加以限制,则run loop一直运行直至事件到达或达到超时时间。如果是事件到达,run loop将事件分发给handler(处理器)进行处理并在处理完成后退出。你的代码然后重启run loop来处理下一个事件。如果是因到达超时时间而退出,you can simply restart the run loop or use the time to do any needed housekeeping。
除了超时时间,你还可以运行run loop在特定的模式下。模式和超时时间并不互斥,你可以在启动一个run loop时同时指定超时时间和模式。模式限制了投递事件给run loop的sources的类型,详细的见“iphone——NSRunLoop概念”。
退出run loop
退出run loop的方法:以超时时间配置run loop启动,显式的停止run loop(调用CFRunLoopStop函数)。
发表评论
-
SOCK_STREAM和SOCK_DGRAM
2015-07-23 20:08 1665sock_stream 是有保障的(即能保证数据正确传送到 ... -
SOCKET bind INADDR_LOOPBACK和INADDR_ANY的区别
2015-07-23 19:49 2067今天写程序时候,服务器端启动了,然后客户端总是连接不上,con ... -
htons()
2015-07-23 19:26 592在C/C++写网络程序的时候,往往会遇到字节的网络顺序和主机顺 ... -
使用symbolicatecrash分析crash文件
2015-03-10 11:32 1190原文 http://www.cnblogs.com/ning ... -
程序设计中的计算复用(Computational Reuse)
2015-02-10 10:18 699从斐波那契数列说起 ... -
didReceiveMemoryWarning
2015-02-09 16:11 548IPhone下每个app可用的内存是被限制的,如果一个app使 ... -
iOS开发中怎么响应内存警告
2015-02-09 16:08 661好的应用应该在系统内存警告情况下释放一些可以重新创建的资源。在 ... -
ASIHTTPRequest多次重复请求的问题
2014-12-17 14:34 652在一个车票订购的项目中,点击一次订购,却生成了2次订单,通过抓 ... -
从 CloudKit 看 BaaS 服务的趋势
2014-09-26 11:51 735从 6 月份 WWDC 苹果发布 ... -
ios编程--AVCapture编程理解
2014-09-26 11:03 9610、媒体采集的几个东西。这里所需要明白的是,在这个流程中,这里 ... -
NSURLProtocol
2014-09-25 10:42 8331、http://nshipster.com/nsurlpro ... -
关于iOS8的extension插件
2014-09-25 10:41 1310关于iOS8的extension插件,有兴趣的同学可以参考一下 ... -
【转】ios app在itunesConnect里面的几种状态
2014-08-05 10:34 1161Waiting for Upload (Yellow) Ap ... -
[转]iOS Dev (45) iOS图标与切片处理工具Prepo
2014-02-07 17:02 1040iOS Dev (45) iOS图标与切片处理工具Prepo ... -
phoneGap开发IOS,JS调用IOS方法/phoneGap插件开发
2014-01-13 17:49 1251前沿 废话不说phoneGap是什么不多介绍,官方网站: h ... -
如何在IOS平台下搭建PhoneGap开发环境(PhoneGap2.5)
2014-01-13 15:23 756由于在下最近在做基于HTML5的跨平台移植,搭建环境的时候着实 ... -
xcode 4 制作静态库详解
2013-12-20 18:27 567最近在做Apple的IOS开发,有开发静态库的需求,本身IOS ... -
【翻译】ios教程-创建静态库
2013-12-20 18:19 3134作者:shede333 主页:htt ... -
封装自己的控件库:iPhone静态库的应用
2013-12-20 17:03 600由于iPhone 控件的极度匮乏和自定义组件在重用上的限制,在 ... -
iphone:使用NSFileManager取得目录下所有文件(遍历所有文件)
2013-11-18 17:56 883From:http://note.sdo.com/u/xiao ...
相关推荐
"cocos2d-iphone-2.0.tar.gz" 是一个压缩包,包含了Cocos2d-iPhone 2.0版本的所有源代码和相关资源。 Cocos2d-iPhone 2.0是该框架的一个重要版本,引入了许多新特性和改进,旨在提高性能和开发效率。以下是关于这个...
【压缩包子文件的文件名称】"mobile-iPhone-Horizontal.rplib" 是资源库文件的名称,其扩展名 ".rplib" 是Axure的库文件格式,意味着这确实是一个可以在Axure中导入并使用的组件库。打开这个文件后,设计师可以将...
"iphone-inline-video.browser.js"这个文件就是为了实现这一功能而设计的JavaScript库。 首先,我们需要了解HTML5 `<video>` 标签的基本用法。`<video>` 标签用于嵌入视频内容,可以设置`src`属性来指定视频源,`...
在C#项目中,你可能有一个名为"iphone-plist-net"的解决方案,它可能包含以下部分: - **Solution File**: .sln 文件,管理所有相关项目的集合。 - **Project File**: .csproj 文件,定义了项目的目标框架、引用、源...
2. **精灵和动作**:Cocos2d-iphone-3提供了精灵(Sprites)类,用于表示游戏中的可移动对象。精灵可以执行各种动作,如平移、旋转、缩放等,这些动作可以通过Action类来定义和控制,极大地简化了游戏逻辑的实现。 ...
iPhone-Explorer-v2-2.dmg,查看ios设备应用程序。
《Cocco2D-iPhone-04》是一个关于Cocos2D-iPhone教程的压缩包,其中包含了深入学习Cocos2D游戏开发的关键知识点。Cocos2D-iPhone是一款广泛应用于iOS平台的游戏开发框架,它基于C++和Objective-C编写,为开发者提供...
本教程“Cocco2D-iPhone-04.rar”是针对Cocos2D-iPhone游戏开发的第四部分,旨在帮助开发者进一步提升其在iPhone游戏开发领域的技能。 在这个教程中,你可能会学习到以下关键知识点: 1. **Cocos2D基础**:了解...
这个名为"iPhone-Wireless-ScanWiFi信号"的源码包,显然是一个专门用于扫描并显示周围可用WiFi信号的iOS应用示例。以下是根据标题、描述以及标签提炼出的相关知识点: 1. **Objective-C或Swift编程**: iOS应用...
《cocos2d-iphone-1.0.1:打造移动平台的游戏开发之旅》 cocos2d-iphone-1.0.1是cocos2d游戏引擎的一个重要版本,发布于2011年11月,为iOS平台的游戏开发者提供了强大的工具集。这个开源框架,以其易用性、灵活性和...
Beginning-iphone-games-development PART 2
"simple-iphone-image-processing"项目正是一款针对iPhone进行图像处理的代码库,旨在帮助开发者实现对图片的边缘检测等操作。本文将深入探讨该项目中的关键技术点和实现原理。 1. 图像处理基础 图像处理是计算机...
压缩包中的cocos2d-iphone-1.1-beta文件夹包含了Cocos2d-iPhone框架的所有源码和资源。这个框架的核心组件包括: 1. **Director**:负责管理场景(Scene)、层(Layer)和时间,是整个游戏循环的调度者。 2. **...
iphone-coverflow,iphone-coverflow,iphone-coverflow,iphone-coverflow,iphone-coverflow,iphone-coverflow,iphone-coverflow,iphone-coverflow,iphone-coverflow
2. iPhone-Bodies.rplib:这个部件库专注于iPhone设备的主体部分,可能包括不同的屏幕尺寸(如iPhone SE、iPhone 8、iPhone X系列等)以及状态栏、导航栏和底部TabBar等常见布局结构。设计师可以快速选择适合不同...
### iPhone多线程编程指南知识点解析 #### 一、多线程编程概述 **1.1 什么是多线程** 多线程是指在一个程序中同时运行多个代码路径的能力。这使得程序可以在执行某些任务的同时处理其他任务,从而提高程序的整体...
设计师在使用"mobile-iPhone-UI"资源时,需考虑用户的行为习惯,如拇指可达性、触摸反馈、动画效果等,以提升用户在使用过程中的满意度。 此外,色彩、字体和图标是构建UI视觉风格的重要元素。iPhone UI通常采用...
SpaceManager-GrenadeGame-一个使用cocos2d-iphone-0.99.5开发的简单的游戏
cocos2d-iphone-extensions-v0.1.3-Himi-ios-...【Cocos2d游戏开发之十四】音频与音效播放以及利用+Cocos2D-iPhone-Extensions嵌入Cocos2d进行视频播放! http://blog.csdn.net/xiaominghimi/article/details/6870259
以下将详细介绍iPhone中线程的基本概念、使用方法以及常见的线程管理技术。 一、线程基础 线程是操作系统分配CPU时间片的基本单位,每个线程都有自己的执行栈,可以在同一进程中独立运行。在iPhone应用中,主线程...