iPhone应用中关于NSTimer的一些问题
2010-11-17 15:23
309 查看
在iphone应用中,NSTimer是一个比较常用的类。但NSTimer也是一个比较麻烦的类。这里就谈谈关于它的一点使用心得。
首先我们来看看NSTimer的使用方法。
基本使用方法下面就用代码来说明了(至于具体的理解自己去查官方文档吧):
对RootViewController.h文件
#import <UIKit/UIKit.h>
@interface RootViewController : UITableViewController {
NSTimer *timer;
}
-(void)ttt:(NSTimer *)theTimer;
@end
对RootViewController.m文件
#import "RootViewController.h"
@implementation RootViewController
#pragma mark -
#pragma mark View lifecycle
- (void)viewDidLoad {
[super viewDidLoad];
timer = [NSTimer scheduledTimerWithTimeInterval:10 target:self selector:@selector(ttt:) userInfo:nil repeats:YES];
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem;
}
-(void)ttt:(NSTimer *)theTimer {
//your operate
}
- (void)dealloc {
[timer invalidate];
[super dealloc];
}
基本用法就是这么简单了。当然我们也可以不让其循环执行。不过这里要说明一点,对于上面定义的timer我们最好采用如下的方式来对其进行判断式关闭:
if ([timer isValid]) {
[timer invalidate];
}
这样有对我们的程序更加安全。我们看一个问题。我们把dealloc中的内容改为如下的内容。运行
- (void)dealloc {
NSLog(@"dealloc : %@",[[self class] description]);
NSLog(@"****timer retainCount : %d****",[timer retainCount]);
[timer invalidate];
NSLog(@"****timer retainCount : %d****",[timer retainCount]);
[super dealloc];
}
运行程序,看终端输出信息,怎么delloc函数没有执行呢?其实没什么奇怪的。因为我们的timer还没有停止嘛。这个所以我们把程序修改如下。即在函数中增加了一个退出函数
-(IBAction)backBTN:(id)sender {
NSLog(@"****timer retainCount : %d****",[timer retainCount]);
[timer invalidate];
NSLog(@"****timer retainCount : %d****",[timer retainCount]);
[self.navigationController popViewControllerAnimated:YES];
}
把delloc改为:
- (void)dealloc {
NSLog(@"dealloc : %@",[[self class] description]);
[super dealloc];
}
在次运行嘿,看到delloc执行了哇。
之所以这样处理的目的在于保证在退出此页面时处理内存释放的问题,否则会导致内存崩溃(这对做集合特别重要)。
首先我们来看看NSTimer的使用方法。
基本使用方法下面就用代码来说明了(至于具体的理解自己去查官方文档吧):
对RootViewController.h文件
#import <UIKit/UIKit.h>
@interface RootViewController : UITableViewController {
NSTimer *timer;
}
-(void)ttt:(NSTimer *)theTimer;
@end
对RootViewController.m文件
#import "RootViewController.h"
@implementation RootViewController
#pragma mark -
#pragma mark View lifecycle
- (void)viewDidLoad {
[super viewDidLoad];
timer = [NSTimer scheduledTimerWithTimeInterval:10 target:self selector:@selector(ttt:) userInfo:nil repeats:YES];
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem;
}
-(void)ttt:(NSTimer *)theTimer {
//your operate
}
- (void)dealloc {
[timer invalidate];
[super dealloc];
}
基本用法就是这么简单了。当然我们也可以不让其循环执行。不过这里要说明一点,对于上面定义的timer我们最好采用如下的方式来对其进行判断式关闭:
if ([timer isValid]) {
[timer invalidate];
}
这样有对我们的程序更加安全。我们看一个问题。我们把dealloc中的内容改为如下的内容。运行
- (void)dealloc {
NSLog(@"dealloc : %@",[[self class] description]);
NSLog(@"****timer retainCount : %d****",[timer retainCount]);
[timer invalidate];
NSLog(@"****timer retainCount : %d****",[timer retainCount]);
[super dealloc];
}
运行程序,看终端输出信息,怎么delloc函数没有执行呢?其实没什么奇怪的。因为我们的timer还没有停止嘛。这个所以我们把程序修改如下。即在函数中增加了一个退出函数
-(IBAction)backBTN:(id)sender {
NSLog(@"****timer retainCount : %d****",[timer retainCount]);
[timer invalidate];
NSLog(@"****timer retainCount : %d****",[timer retainCount]);
[self.navigationController popViewControllerAnimated:YES];
}
把delloc改为:
- (void)dealloc {
NSLog(@"dealloc : %@",[[self class] description]);
[super dealloc];
}
在次运行嘿,看到delloc执行了哇。
之所以这样处理的目的在于保证在退出此页面时处理内存释放的问题,否则会导致内存崩溃(这对做集合特别重要)。
相关文章推荐
- 关于Qt开发iPhone/iPad和Android环境下的应用的一些问题
- 【IPHONE】关于IPHONE IOS4.0越狱遇到的一些问题汇总
- 今天你AJAX了没有?——关于AJAX应用所解决的一些常见问题
- 应用mina的例子做了一些修改,但有关于连接数的问题
- 关于json-server在vue应用中的一些问题
- 关于百度定位申请应用AK的一些问题
- 一个关于iphone应用邮件功能的问题
- 关于juqery ajax应用中的一些问题
- RunLoop的应用场景---关于滑动tableView的时候NSTimer 暂停的问题
- iPhone应用提交流程出现的一些问题
- 关于redis的一些问题,事物方面,线程,在项目中的应用等几个点
- 关于iphone界面设计的一些尺寸问题
- iPhone应用提交流程出现的一些问题
- 【IPHONE】关于IPHONE IOS4.0越狱遇到的一些问题汇总
- 关于背包问题的一些理解和应用
- 应用mina的例子做了一些修改,但有关于连接数的问题
- 关于Android23 及以上模拟器处理应用闪退的一些问题(权限相关)
- 关于开发Android应用时写从图库选择头像功能时遇到的一些问题。
- JAVA关于SET,GET的方法应用和一些问题
- 关于web应用中跨域问题的解决方案,并特别针对移动方向提出一些解决方案