【OC学习-24】实例:创建一个文件并连续写入10次当前时间——巩固文件操作和熟悉定时器操作

(1)创建一个writeData类,在writeData.h里面:

#import <Foundation/Foundation.h>

@interface writeData : NSObject
-(void)runWrite;//定义一个方法供调用,这个方法是创建并打开一个文件,然后利用定时器每个1秒调用另一个私有方法,这私有方法把当前时间到这个文件夹,但只写10次
@end

(2)在writeData.m里面具体实现功能:

#import "writeData.h"

@implementation writeData
-(void)runWrite{
    //以下两行生成一个文件目录
    NSString *homePath=NSHomeDirectory();
    NSString *filePath=[homePath stringByAppendingPathComponent:@"testfile.text"];
    //用上面的目录创建这个文件
    NSFileManager *fileManager=[NSFileManager defaultManager];
    BOOL success=[fileManager createFileAtPath:filePath contents:nil attributes:nil];
    if (success) {
        NSLog(@"success");
    }
    //打开上面创建的那个文件
    NSFileHandle *fileHandle=[NSFileHandle fileHandleForWritingAtPath:filePath];
    //开启定时器,每隔1s调用一个timeAction方法
    [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timeAction:) userInfo:fileHandle repeats:YES];
}
-(void)timeAction:(NSTimer *)timer{
    static int n=0;
    NSFileHandle *fileHandle=timer.userInfo;//通过timer把对象传过来,只不过取了个重复的名字,可以换名字,但下面用到的几个地方要跟着变换
    [fileHandle seekToEndOfFile];//因为是循环写入,所以每次打开文件因为把光标定位在文末
    NSDate *currDate=[NSDate date];//先获取当前时间
    //以下两行是创建一个格式化工具,先初始化一个时间格式,然后定义这个格式
    NSDateFormatter *dateFormate=[[NSDateFormatter alloc]init];
    [dateFormate setDateFormat:@"yyyy/MM/dd HH:mm:ss"];
    //利用上面的时间格式工具把日期转换成字符串对象格式
    NSString *dateStr=[dateFormate stringFromDate:currDate];
    dateStr=[dateStr stringByAppendingString:@"\n"];//并且在这个字符串后面增加换行
    NSData *data=[dateStr dataUsingEncoding:NSUTF8StringEncoding];//把这个字符串转换成数据格式用于写入文件里
    [fileHandle writeData:data];//写入文件
    if (n==10) {     //控制写入次数
        [timer invalidate];//达到次数后关闭定时器
        [fileHandle closeFile];//关闭文件
    }
    n++;
}
@end

(3)在main.m里:

#import <Foundation/Foundation.h>
#import "writeData.h"//别忘记导入

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        writeData *wdata=[[writeData alloc]init];//声明一个对象
        [wdata runWrite];//利用这个对象去调用方法
    }
    [[NSRunLoop currentRunLoop]run];//启动加入到消息中的定时器吧应该,如果不写这句,只创建了这个文件,但是没有任何写入数据
    return 0;
}

(4)结果

总结:动手写,有些语句不太理解,百度,并且在后面继续巩固。

更多NSTimer详见:NSTimer

更多NSRunLoop详见:NSRunLoop的一点理解       IOS开发中NSRunloop跟NSTimer的问题 
  NSRunLoop 概述和原理

时间: 2024-10-03 00:18:45

【OC学习-24】实例:创建一个文件并连续写入10次当前时间——巩固文件操作和熟悉定时器操作的相关文章

HTML学习笔记--实例-创建一个注册页面--select两个option出来结果却是四个选项,其中两个空白选项的原因?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

创建一个唤醒Alarm,它在10秒钟后触发

创建只激活一次的Alarm,可使用Set方法,给它指定一个Alarm类型.触发时间和一个要激活的pending Intent. 4种Alarm类型: ● RTC_WAKEUP:指定时间唤醒设备,并激活Pending intent ● RTC:指定时间点激活Pending ,但不会唤醒设备 ● ELAPSED_REALTIME:设备启动之后经过的时间激活Pending intent,但不唤醒设备 ● ELAPSED_REALTIME_WAKEUP:在设备启动并经过指定的时间之后唤醒设备和激活Pen

QT学习之路--创建一个对话框

Q_OBJECT:这是一个宏,凡是定义信号槽的类都必须声明这个宏. 函数tr()全名是QObject::tr(),被他处理过的字符串可以使用工具提取出来翻译成其他语言,也就是做国际化使用. 对于QT学习之路:Qt学习之路(7):创建一个对话框(上)这个程序.编译出现 invalid use of incomplete type ‘class QPushButton’ findButton->setEnabled(!text.isEmpty()); ^ In file included from

ROS学习随笔二(创建一个简单的ROS package)

本人在学习过程中,参见了如下几个博客及网站: ROS操作官网:http://wiki.ros.org/ROS/Tutorials 博客:http://blog.sina.com.cn/s/articlelist_1712413141_7_1.html 以及:http://blog.csdn.net/column/details/ros-explore.html 在创建package之前,需要先创建一个工作空间,本人安装的ROS版本是Fuerte. 1.Creating a ROS WorkSpa

创建一个实例&amp;创建一个线程。。

1 using System; 2 using System.Threading; 3 4 5 namespace WorkerThread02 6 { 7 class ThreadTest 8 { 9 bool done; 10 static void Main() 11 { 12 ThreadTest tt=new ThreadTest();//创建一个类的实例 13 Thread t=new Thread(WriteY);//创建一个线程. 14 .............. 15 ...

DirectX11 学习笔记3 - 创建一个立方体 和 坐标轴

这个程序再进一步的将上一个程序 面向对象化. 把模型类独立出来.更加像一个框架. 在此中遇到了一个很逗比的问题,弄了一晚上,看了好几遍其他列子才找到.就是有些函数一定要放在Render里面实时更新,而不是只放到初始化InitModel里面 因为当要渲染多个物体的时候,缓冲区的内容是要随设备变化的. 话不多说直接上代码 主程序main #include "D3DBase.h" #include "Axis.h" #include "Cube.h"

DirectX11 学习笔记3 - 创建一个立方体 和 轴

该方案将在进一步的程序 面向对象. 独立的模型类.更像是一个框架. 其中以超过遇到了一个非常有趣的问题,.获得一晚.我读了好几遍,以找到其他的列子.必须放在某些功能Render里面实时更新,而不是仅仅进入初始化InitModel里边 染多个物体的时候,缓冲区的内容是要随设备变化的. 话不多说直接上代码 主程序main #include "D3DBase.h" #include "Axis.h" #include "Cube.h" class D3

OpenStack开发学习笔记03————创建一个openstack

当fuel for openstack安装部署完成后,就可以去创建openstack了 首先,打开https://10.20.0.2:8443/      输入默认的  用户名和密码    admin  admin   来进行登陆 登陆 创建openstack 这时上边报错了,,很尴尬......... WARNING: Failed to build the bootstrap image, see /var/log/fuel-bootstrap-image-build.log for det

IOS开发之小实例--创建一个简单的用于视频录制和回放的应用程序

前言:还是看了一下国外的入门IOS文章:<Create a Simple App for Video Recording and Playback>,主要涉及视频录制和回放的功能的基本实现. iOS的API用于记录和播放视频的对刚入门IOS的新人有点混乱,因为有几个可用的选项.如果你只是想打一个视频,你可以用MediaPlayer的框架,它可以让我们发挥我们的设备本地存储的视频,或从远程位置.但是,如果你需要高级功能,如媒体资产管理,媒体编辑,跟踪管理,和其他人,你必须使用AVFoundati