10,文件委托,以便操作文件。头部看起来像是这样。

@interface MyFileManager : NSObject

@property(strong)NSFileManager *fileManager;

@end

.m文件

#import "MyFileManager.h"

@implementation MyFileManager

@synthesize fileManager;

@end

可以在头部引入接口。

#import <Foundation/Foundation.h>

@interface MyFileManager : NSObject<NSFileManagerDelegate>

@property(strong)NSFileManager *fileManager;

@end

MyFileManager里面的可选方法。是否能复制

- (BOOL)fileManager:(NSFileManager *)fileManager shouldCopyItemAtPath:(NSString *)srcPath  toPath:(NSString *)dstPath{

if([dstPath hasPrefix:@"/Users/Shared/Book/Protected"]){

NSLog(@"We cannot copy files into the protected folder and so this file was not copied");

return NO;

}

else{

NSLog(@"We just copied a file successfully");

return YES;

}

}

重写初始化方法

- (id)init {

self = [super init];

if (self) {

self.fileManager = [[NSFileManager alloc] init];

self.fileManager.delegate = self;

}

return self;

}

在main.m里面使用刚刚创建的类。

#import <Foundation/Foundation.h>

#import "MyFileManager.h"

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

{

@autoreleasepool {

MyFileManager *myFileManager = [[MyFileManager alloc] init];

NSString *protectedDirectory = @"/Users/Shared/Book/Protected";

NSString *cacheDirectory = @"/Users/Shared/Book/Cache";

NSString *fileSource = @"/Users/Shared/Book/textfile.txt";

NSString *fileDestination1 = @"/Users/Shared/Book/Protected/textfile.txt";

NSString *fileDestination2 = @"/Users/Shared/Book/Cache/textfile.txt";

NSError *error = nil;

NSArray *listOfFiles;

NSLog(@"Look at directories BEFORE attempting to copy");

listOfFiles = [myFileManager.fileManager contentsOfDirectoryAtPath:protectedDirectory

error:&error];

NSLog(@"List of files in protected directory (before):%@", listOfFiles);

listOfFiles = [myFileManager.fileManager contentsOfDirectoryAtPath:cacheDirectory

error:&error];

NSLog(@"List of files in cache directory (before):%@", listOfFiles);

//Attempt to copy into protected folder:

BOOL fileCopied1 = [myFileManager.fileManager copyItemAtPath:fileSource

toPath:fileDestination1

error:&error];

if(error)

NSLog(@"There was an error, %@.  fileCopied1 = %i", error, fileCopied1);

//Attempt to copy into cache folder:

BOOL fileCopied2 =  [myFileManager.fileManager copyItemAtPath:fileSource

toPath:fileDestination2

error:&error];

if(error)

NSLog(@"There was an error, %@.  fileCopied2 = %i", error, fileCopied2);

NSLog(@"Look at directories AFTER attempting to copy");

listOfFiles = [myFileManager.fileManager contentsOfDirectoryAtPath:protectedDirectory

error:&error];

NSLog(@"List of files in protected directory (after):%@", listOfFiles);

listOfFiles = [myFileManager.fileManager contentsOfDirectoryAtPath:cacheDirectory

error:&error];

NSLog(@"List of files in cache directory (after):%@", listOfFiles);

}

return 0;

}

此例子简单说明了委托方法的应用。

11,

使用文件或其他来源的数据。

组合字符串并写入文件。

NSUInteger length = 3;

char bytes1[length];

bytes1[0] = 'A';

bytes1[1] = 'B';

bytes1[2] = 'C';

char bytes2[length];

bytes2[0] = 'D';

bytes2[1] = 'E';

bytes2[2] = 'F’;

声明可变数组。

NSMutableData *mutableData = [[NSMutableData alloc] init];

可变数组有很多方法,具体参考手册。

下面是代码。

NSUInteger length = 3;

char bytes1[length];

bytes1[0] = 'A';

bytes1[1] = 'B';

bytes1[2] = 'C';

for (int i=0;i<sizeof(bytes1);i++)

NSLog(@"bytes1[%i] = %c", i, bytes1[i]);

char bytes2[length];

bytes2[0] = 'D';

bytes2[1] = 'E';

bytes2[2] = 'F';

for (int i=0;i<sizeof(bytes2);i++)

NSLog(@"bytes2[%i] = %c", i, bytes2[i]);

NSMutableData *mutableData = [[NSMutableData alloc] init];

[mutableData appendBytes:bytes1

length:length];

[mutableData appendBytes:bytes2

length:length];

NSLog(@"mutableData = %@", mutableData);

char *bytesFromData = (char *)[mutableData bytes];

for (int i=0;i<length*2;i++)

NSLog(@"bytesFromData[%i] = %c", i, bytesFromData[i]);

NSError *error = nil;

BOOL dataSaved = [mutableData writeToFile:@"/Users/Shared/Book/datadump.txt"

options:NSDataWritingAtomic

error:&error];

if(dataSaved)

NSLog(@"mutableData successfully wrote contents to file system");

else

NSLog(@"mutableData was unsuccesful in writing out data because of %@", error);

12,NSCache缓存数据。

比如创建一个ViewController类。

.h文件里面

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

@property (strong) NSCache *cache;

@property (assign) BOOL regularLogo;

@property (strong) UIImageView *myImageView;

@property (strong) UIButton *loadImageButton;

- (void)presentImage;

@end

.m文件里面

#import "ViewController.h"

@implementation ViewController

-(void)viewDidLoad{

[super viewDidLoad];

//set up the cache

self.cache = [[NSCache alloc] init];

} @end

只要试图被激活就可以使用缓存。

下面是具体代码。

Listing 4-14. AppDelegate.h #import <UIKit/UIKit.h>

@class ViewController;

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;

@property (strong, nonatomic) ViewController *viewController;

@end

Listing 4-15. AppDelegate.m #import "AppDelegate.h"

#import "ViewController.h"

@implementation AppDelegate

@synthesize window = _window;

@synthesize viewController = _viewController;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

// Override point for customization after application launch.

self.viewController = [[ViewController alloc]

initWithNibName:@"ViewController" bundle:nil];

self.window.rootViewController = self.viewController;

[self.window makeKeyAndVisible];

return YES;

} @end

Listing 4-16. ViewController.h #import <UIKit/UIKit.h>

@interface ViewController : UIViewController

@property (strong) NSCache *cache;

@property (assign) BOOL regularLogo;

@property (strong) UIImageView *myImageView;

@property (strong) UIButton *loadImageButton;

- (void)presentImage;

@end

Listing 4-17. ViewController.m #import "ViewController.h"

@implementation ViewController

@synthesize cache, regularLogo, myImageView, loadImageButton;

-(void)viewDidLoad{

[super viewDidLoad];

//Change the view's background color to white

self.view.backgroundColor = [UIColor whiteColor];

//Load the regular logo first

self.regularLogo = YES;

//set up the cache

self.cache = [[NSCache alloc] init];

//Setup the button

self.loadImageButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];

self.loadImageButton.frame = CGRectMake(20, 415, 280, 37);

[self.loadImageButton addTarget:self

action:@selector(presentImage)

forControlEvents:UIControlEventTouchUpInside];

[loadImageButton setTitle:@"Present Image" forState:UIControlStateNormal];

[self.view addSubview:loadImageButton];

//Setup the UIImageView

self.myImageView = [[UIImageView alloc] init];

self.myImageView.frame = CGRectMake(0, 0, 320, 407);

self.myImageView.contentMode = UIViewContentModeScaleAspectFit;

[self.view addSubview:self.myImageView];

}

- (void)presentImage{

if(regularLogo){

NSString *key = @"regular-logo";

NSPurgeableData *data = [cache objectForKey:key];

if(!data){

NSString *bundlePath = [[NSBundle mainBundle] bundlePath];

NSString *imagePath = [NSString stringWithFormat: @"%@/MobileAppMastery-Log.png", bundlePath];

data = [NSPurgeableData dataWithContentsOfFile:imagePath];

[cache setObject:data forKey:key];

NSLog(@"Retrieved resource(%@) and added to cache", key);

} else

NSLog(@"Just retrieved resource(%@)", key);;

self.myImageView.image = [UIImage imageWithData:data];

regularLogo = NO;

} else{

NSString *key = @"greyscale-logo";

NSPurgeableData *data = [cache objectForKey:key];

if(!data){

NSString *bundlePath = [[NSBundle mainBundle] bundlePath];

NSString *imagePath = [NSString stringWithFormat:@"%@/MAM_Logo_Square_No_Words_Grayscale.png", bundlePath];

data = [NSPurgeableData dataWithContentsOfFile:imagePath];

[cache setObject:data forKey:key];

NSLog(@"Retrieved resource(%@) and added to cache", key);

} else

NSLog(@"Just retrieved resource(%@)", key);

self.myImageView.image = [UIImage imageWithData:data];

regularLogo = YES;

}

} @end

ObjectiveC 文件操作二的更多相关文章

  1. Node.js文件操作二

    前面的博客 Node.js文件操作一中主要是对文件的读写操作,其实还有文件这块还有一些其他操作. 一.验证文件path是否正确(系统是如下定义的) fs.exists = function(path, ...

  2. 【Directory】文件操作(初识文件操作二)

    上篇我们说了关于文件的创建删除更改可以通过File这个类来完成.对于目录的操作其实File类也可以完成创建删除等相关的操作.用法跟文件的方法大致相同. 那么下面就一起来看一下关于目录相关的用法. 一, ...

  3. 基于VC的声音文件操作(二)

    (二)VC的声音操作 操作声音文件,也就是将WAVE文件打开获取其中的声音数据,根据所需要的声音数据处理算法,进行相应的数学运算,然后将结果重新存储与WAVE格式的文件中去:可以使用CFILE类来实现 ...

  4. DAY8 文件操作(二)

    一.写 1.1写文件 # w:没有文件新建文件,有文件就清空文件 w = open('1.txt', 'w', encoding='utf-8') w.write('000\n') # 在写入大量数据 ...

  5. Java文件操作二:File文件的方法

    一.文件的判断方法 判断方法 .boolean canExecute()判断文件是否可执行 .boolean canRead()判断文件是否可读 .boolean canWrite() 判断文件是否可 ...

  6. ObjectiveC 文件操作一

    1,引用和使用文件 NSFileManager 是一个单例对象,在mac应用中可以获取任何地址,在IOS中获取的是相对应的应用程序的地址.可以使用 defaultManager 来得到当前应用程序地址 ...

  7. AIR文件操作(二):使用文件对象操作文件和目录

    转载于:http://www.flashj.cn/wp/air-file-operation2.html 文件对象是啥?文件对象(File对象)是在文件系统中指向文件或目录的指针.由于安全原因,只在A ...

  8. Python 文件操作二

    readlines就像read没有参数时一样,readlines可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素 #coding=utf-8 f = ...

  9. C/C++(文件操作二)

    二进制读写才是本质 二进制的读写对文件标记不敏感. eg: 对图片进行加密与解密: 用命令的形式去执行: //xx.exe -c src dest 加密 //xx.exe -d src dest 解密 ...

随机推荐

  1. 分布式传输协调程序MSDTC配置

    尊重原著作:本文转载自http://blog.csdn.net/wilsonke/article/details/8468438 配置说明文件:http://files.cnblogs.com/hlx ...

  2. 详解VB.net编写DLL(动态链接库、应用程序扩展)文件

    首先,我们启动VS(Visual-Studio简称),我使用的是VS2008版本. 新建一个项目-选择内裤(额...不好意思)→类库 ,名称就默认吧. 编写类库没有窗体设计,因此我们不能使用工具箱中的 ...

  3. js call方法介绍

    call 方法 请参阅 应用于:Function 对象 要求 版本 5.5 调用一个对象的一个方法,以另一个对象替换当前对象. call([thisObj[,arg1[, arg2[, [,.argN ...

  4. python3 模拟登录网站

    最近学习python,因经常登录公积金网站查看公积金缴存还款情况,so网上找了写脚本,修改了一下,方便获取网页中的数据. 使用谷歌浏览器F12查看登录请求内容 1.request header需要参数 ...

  5. Oracle EBS-SQL (SYS-15):查询表空间2.sql

    /*表空间查询*/ SELECT d.status "状态", d.tablespace_name "名称", d.contents "类型" ...

  6. M​i​c​r​o​s​o​f​t​ ​w​e​b​ ​a​p​p​l​i​c​a​t​i​o​n​ ​s​t​r​e​s​s​ ​t​o​o​l​ 测试

    一.准备工作 为了测试数据的准备性,首先需要删除缓存和Cookies等临时文件.启动IE后打开“工具”菜单下的“Internet”选项命令,在打开的“Internet选项”窗口的“常规”选项卡中,单击 ...

  7. 无线功率 mW 和 dBm 的换算

    无线电发射机输出的射频信号,通过馈线(电缆)输送到天线,由天线以电磁波形式辐射出去.电磁波到达接收地点后,由天线接收下来(仅仅接收很小很小一部分功率),并通过馈线送到无线电接收机.因此在无线网络的工程 ...

  8. 深入分析MFC文档视图结构(项目实践)

    k_eckel:http://www.mscenter.edu.cn/blog/k_eckel 文档视图结构(Document/View Architecture)是MFC的精髓,也是Observer ...

  9. [Leetcode][Python][DP]Regular Expression Matching

    # -*- coding: utf8 -*-'''https://oj.leetcode.com/problems/regular-expression-matching/ Implement reg ...

  10. [虚拟化/云][全栈demo] 为qemu增加一个PCI的watchdog外设(七)

    目标: 1. 完成最终的设备驱动,增加具体的watchdog设备操作的代码. 测试代码: 代码最终实现见cwd_demo.c 代码只实现了read与write.  没有实现ioctl. 因此,我们可以 ...