博客

iOS延时执行的几种方法

热度 7已有 20486 次阅读 2012-6-1 11:16 |系统分类:ios

 
 
1.最直接的方法performSelector:withObject:afterDelay:
这种方法的缺点:每次要为延时写一个方法
 
2.使用类别,用BOLCK执行

[代码]c#/cpp/oc代码:

01 @implementation NSObject (PerformBlockAfterDelay)
02  
03 - (void)performBlock:(void (^)(void))block
04           afterDelay:(NSTimeInterval)delay
05 {
06     block = [[block copy] autorelease];
07     [self performSelector:@selector(fireBlockAfterDelay:)
08                withObject:block
09                afterDelay:delay];
10 }
11  
12 - (void)fireBlockAfterDelay:(void (^)(void))block {
13     block();
14 }
15  
16 @end
 
3.使用GCD

[代码]c#/cpp/oc代码:

1 void RunBlockAfterDelay(NSTimeInterval delay, void (^block)(void))
2 {
3     dispatch_after(dispatch_time(DISPATCH_TIME_NOW, NSEC_PER_SEC*delay),
4       dispatch_get_current_queue(), block);
5 }
 
4.可能是不太好的方法,用animation的completion参数

[代码]c#/cpp/oc代码:

1 [UIView animateWithDuration:0.0 delay:5.0 options:UIViewAnimationOptionAllowUserInteraction animations:^{
2 } completion:^(BOOL finished) {
3     //do stuff here
4 }];
 
5.使用NSOperationQueue,在应用程序的下一个主循环执行:

[代码]c#/cpp/oc代码:

1 [[NSOperationQueue mainQueue] addOperationWithBlock:aBlock];
 
这个和调用performSelector: with afterDelay of 0.0f等价

 

posted @ 2014-04-12 10:09 忘删 阅读(392) 评论(0) 推荐(0)
摘要: iOS持久化文件系统归档和序列化数据库1.文件系统不管是Mac OS X 还是iOS的文件系统都是建立在UNIX文件系统基础之上的。1.1 沙盒模型在iOS中,一个App的读写权限只局限于自己的沙盒目录中。沙盒模型到底有哪些好处呢?安全:别的App无法修改你的程序或数据保护隐私:别的App无法读取你的程序和数据方便删除:因为一个App所有产生的内容都在自己的沙盒中,所以删除App只需要将沙盒删除就可以彻底删除程序了iOS App沙盒中的目录App Bundle ,如xxx.app 其实是一个目录,里面有app本身的二进制数据以及资源文件Documents, 存放程序产生的文档数据Library 阅读全文
posted @ 2014-04-09 12:27 忘删 阅读(241) 评论(0) 推荐(0)
摘要: 1、简介:1.1iOS有三种多线程编程的技术,分别是:1.、NSThread2、CocoaNSOperation(iOS多线程编程之NSOperation和NSOperationQueue的使用)3、GCD全称:GrandCentralDispatch(iOS多线程编程之GrandCentralDispatch(GCD)介绍和使用)这三种编程方式从上到下,抽象度层次是从低到高的,抽象度越高的使用越简单,也是Apple最推荐使用的。这篇我们主要介绍和使用NSThread,后面会继续2、3的讲解和使用。1.2三种方式的优缺点介绍:NSThread:优点:NSThread比其他两个轻量级缺点:需要自 阅读全文
posted @ 2014-03-26 16:58 忘删 阅读(124) 评论(0) 推荐(0)
摘要: 深入浅出 Cocoa 之 Core Data(2)- 代码示例罗朝辉(http://blog.csdn.net/kesalin)CC 许可,转载请注明出处前面详细讲解了 Core Data 的框架以及设计的类,下面我们来讲解一个完全手动编写代码使用这些类的示例,这个例子来自苹果官方示例。在这个例子里面,我们打算做这样一件事情:记录程序运行记录(时间与 process id),并保存到xml文件中。我们使用 Core Data 来做这个事情。示例代码下载:点击这里一,建立一个新的 Maccommand-line tool application 工程,命名为 CoreDataTutori 阅读全文
posted @ 2014-03-26 14:41 忘删 阅读(157) 评论(0) 推荐(0)
摘要: 深入浅出 Cocoa 之 Core Data(1)- 框架详解罗朝辉(http://blog.csdn.net/kesalin)CC 许可,转载请注明出处Core data 是 Cocoa 中处理数据,绑定数据的关键特性,其重要性不言而喻,但也比较复杂。Core Data 相关的类比较多,初学者往往不太容易弄懂。计划用三个教程来讲解这一部分:框架详解:讲解 Core data 框架,运作过程,设计的类;Core data应用程序示例:通过生成一个使用 Core data 的应用程序来讲解如何 在 XCode 4 中使用 Core data。手动创建Core data示例:不利用框架自动生成代码 阅读全文
posted @ 2014-03-26 13:53 忘删 阅读(177) 评论(0) 推荐(0)
摘要: 什么是GCDGrand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法。该方法在Mac OS X 10.6雪豹中首次推出,并随后被引入到了iOS4.0中。GCD是一个替代诸如NSThread, NSOperationQueue, NSInvocationOperation等技术的很高效和强大的技术,它看起来象就其它语言的闭包(Closure)一样,但苹果把它叫做blocks。应用举例让我们来看一个编程场景。我们要在iphone上做一个下载网页的功能,该功能非常简单,就是在iphone上放置一个按钮,点击该按钮时,显示一个转动的圆圈,表示正在进行下载,下.. 阅读全文
posted @ 2014-03-18 16:57 忘删 阅读(244) 评论(0) 推荐(0)
摘要: 最近在研究ios的推送问题,遇到了一些问题,最终整理了一下。放在这里和大家分享APNS的推送机制首先我们看一下苹果官方给出的对ios推送机制的解释。如下图Provider就是我们自己程序的后台服务器,APNS是Apple Push Notification Service的缩写,也就是苹果的推送服务器。上图可以分为三个阶段:第一阶段:应用程序的服务器端把要发送的消息、目的iPhone的标识打包,发给APNS。第二阶段:APNS在自身的已注册Push服务的iPhone列表中,查找有相应标识的iPhone,并把消息发送到iPhone。第三阶段:iPhone把发来的消息传递给相应的应用程序,并且按照 阅读全文
posted @ 2014-02-12 16:59 忘删 阅读(163) 评论(0) 推荐(0)
摘要: 一、 Writable atomic property 'numberOfImages' cannot pair a synthesized setter/getter with a user defined setter/getter这个是导入了OPenFlow包产生的,查找这两个文件的头文件声明获知,这两个属性声明是这样的:@property int number;@propertyint numberOfImages;可以有以下几种方法解决:1. 声明属性为nonatomic,即我上面的修改方法。2. @synthesize合成用getter/setter方法(即自己手动 阅读全文
posted @ 2014-02-08 11:18 忘删 阅读(556) 评论(0) 推荐(0)
摘要: 不知道你有没有经常遇到 这种 参数为 nil 的错误 或者是 数组错误。而且现在在 多线程中 还是 大量使用 block 的情况下 要查找起来 实在是 太费劲了所以 我用了个 取巧的办法(可能会导致你的逻辑错误) 用swizzle 来替换这些没验证的方法我是按我自己 umeng 的 错误统计来写的 给出个 例子而已+(void)callSafeCategory{NSError* error = nil;[objc_getClass("__NSPlaceholderArray") jr_swizzleMethod:@selector(initWithObjects:count 阅读全文
posted @ 2014-01-10 15:43 忘删 阅读(781) 评论(4) 推荐(0)
摘要: 在没有一个类的实现源码的情况下,想改变其中一个方法的实现,除了继承它重写、和借助类别重名方法暴力抢先之外,还有更加灵活的方法吗?在Objective-C编程中,如何实现hook呢?标题有点大,计划分几篇来总结。本文主要介绍针对selector的hook,主角被标题剧透了———— Method Swizzling 。Method Swizzling 原理在Objective-C中调用一个方法,其实是向一个对象发送消息,查找消息的唯一依据是selector的名字。利用Objective-C的动态特性,可以实现在运行时偷换selector对应的方法实现,达到给方法挂钩的目的。每个类都有一个方法列表, 阅读全文
posted @ 2014-01-10 15:42 忘删 阅读(441) 评论(0) 推荐(0)
点击右上角即可分享
微信分享提示