应用程序包: (bundle)包含了所有的资源文件和可执行文件
documents:保存应用运行时生成的需要持久化的数据,ITuns同步设备时会备份该目录。例如,游戏应用可将游戏存档保存在该目录
Library/Caches:保存应用运行时生成的需要持久化的数据, iTuns同步设备时不会备份该目录。一般存储体积较大、不需要备份的非重要数据
Library/Preference:保存应用的所有偏好设置,IOS的设置应用会在该目录中查找应用的设置信息。iTuns同步设备时会备份该目录
Tmp:保存应用运行时所需的临时数据,使用完毕侯再将响应的文件从该目录删除。应用没有运行时,系统也可能会清楚该目录下的文件。iTUns同步设备时不会备份该目录
---------------------------------------------------------------------
友情提示:
1.如果做数据存取方面的开发,测试工作最好在模拟器上先完成,模拟机上更好看数据文件路径。
2.iPhone开发中,如果做文件的读写操作,同差功能是没有错误提示的。如果想一个不存在的文件夹中写文件,读写文件的方法会正常执行,并且不会报错, 但是,文件不会写入!
NSString *home = NSHomeDirectory(); home为应用程序主目录路径
NSString *tmpDir = NSTemporaryDirectory(); tmpDir为临时文件目录路径
NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory directory, NSSearchPathDomaininMask domainMask, BOOL expandTilde); <
NSArray *documents = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) ; <
NSString *docDir = documents[0]; <
第一个参数:要搜索的目录类型,枚举
第二个参数:要搜索的目录所在范围,通常是用户目录范围 通常是用户目录范围 NSUserDomainMask
第三个参数:是否展开波浪号?~ 对应应用程序的,~代表程序当前目录
让视图滚动起来:
NSRange为一结构体:里面有两个参数:location, 和 length
NSRange range = NSMakeRange(content.length, 0);
[_textView scrollRangeToVisible:range];
------------------MAC技巧-----------------------------------
1.显示Mac隐藏文件的命令: defaults write com apple.finder AppleShowAllFiles - bool true
2.隐藏Mac隐藏文件的命令: defaults write com apple.finder AppleShowAllFiles - bool false
注意:需要重启 finder
-------------------------------------——-----------------------------------------------------------------
IOS图像加载的4中方式:
相册:用户的相册资源,通过UIImagePickerController读取
应用程序包:与应用程序源文件同一目录,可通过文件路径读取
沙盒:沙盒目录即可以保存图片,也可以通过路径读取。
因特网:通过URL从网络傻姑娘下载图片读取
沙盒与应用程序包中的图像读取的方式是一样的,都是通过文件路径读取,不同的是路径不一样。
NSData提供了简单的网络数据加载:NSData和UIImage之间可以相互转换:
网络获取数据 NSURL *url = [NSURL URLWithString:@"http://www.baidu.com/img/520.gif"]; <
将NSData转成UIImage NSData *data = [NSData dataWithContentsOfURL:url]; <
UIImage *image = [UIImage imageWithData:data]; <
UIImage转成NSData compressionQuality 图像的范围为0.0(最低品质)到1.0(最高品质)的压缩系数
NSData *data = UIImageJPEGRepresentation(UIImage *image, CGFloat compressionQuality); <
[data writeToFile:path atomically:YES]; <
将图像数据写入相册中 UIImageWriteToSavePhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfl:), NULL);
- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo { }; <
相册资源访问通过UIImagePickerController类来读取
UIImagePickerController类集成自UINavigaitionController,是个独立的导航控制起,一般使用模态窗口的方式弹出
sourceType属性可指定选取器要选取的资源类型,有如下3中类型:
所有同步到iPhone的图像以及包括用户拍摄的图片在内的任何相册 UIImagePickerControllerSourceTypePhotoLibrary ; <
仅含相册 UIImagePickerControllerSourceTypeSavedPhotosAlbum ; <
允许用户使用iPhone内置的摄像头拍照 UIImagePickerControllerSourceTypeCamera ; <
设置图像编辑,允许选取器框定的拉伸图像。默认为NO @property(nonatomic)BOOL allowsEditing ; <
图像选取必须实现 UIImagePickerControllerDelegate协议,以监听选中的资源
info包含了许多数据,通过UIImagePickerControllerEditedImage读取编辑后的图像,通过UIImagePickerControllerOriginalImage读取源图像
-(void)imagePickerController:(UIImagePickerController *)pickerdidFinishPickingMediaWithInfo:(NSDictionary *)info; <
取消选取 - (void) imagePickerControllerDidCancel:(UIImagePickerController *)picker; <
NSString ---- 保存时需要自定字符串编码
UIImage ---- 注意UIImage无法写入文件,需要使用NSData数据类型进行中转,NSData可以将任何类型的文件,以二进制格式存储
NSData *data = UIImagePNGRepresentation(image); < 生成图像数据
------------------------------UIImagePickerController-------------------------------------------------------------------------------
添加两个协议:UINavigationControllerDelegate, UIImagePickerControllerDelegate
UIImagePickerController *imagePicker = [[UIImagePickerController alloc]init]; 实例化照片选择器
[imagePicker setAllowsEditing:YES]; 设置属性
[imagePicker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary]; <
[imagePicker setDelegate:self]; <
[self presentViewController:imagePicker animated:YES completion:nil]; <
#pragma mark UIImageViewPicker 代理方法
- (void)imagePickerController:(UIImagePickerController *):(NSDictionary *)info
{
UIImage *image = info[@"UIImagePickerControllerEditorImage"];
[_imageView setImage:image];
[picker dismissViewControllerAnimated:YES completion:nil];
}
----------------------------------------------------------------------------------------------------------------------------------------
看到autoreleasing描述符,需要实例化一个指针,并且传入指针的地址
NSString *error = nil;
NSString *string = [NSString stringWithContentsOfFile:strPath encoding:NSUTF8StringEncoding error:&error];
NSLog(@"string %@", string);
-------------------------------------归档和恢复------------------------------------------------------------------
NSString、NSDictionary、NSArray、NSData、NSNumber等类型的对象,可以直接用NSKeyedArchiver进行归档和恢复
不是所有的对象都可以直接用这种方法进行谷底昂,只有遵守了NSCoding协议的对象才可以
NSCoding协议方法:
encodeWithCoder: 每次归档对象时,都会调用这个方法。一般在这个方法里面指定如何归档对象中的每个实例对象,可以使用encodeObject:forKey:方法归档实例变量
initWithCoder: 每次从文件中回复对象时,都会调用这个方法。一般在这个方法里面指定如何解码文件中的数据为对象的实例变量,可以使用decodeObject:forKey:方法解码实例变量
[NSKeyedArchiver archiveRootObject: toFile: ]会首先调用被归档类的encodeWithCoder方法对该类的属性编码,然后再写入文件进行归档
[NSKeyedUnarchiver unarchiveObjectWithFile: path]从文件加载数据侯,会调用类的initWithCoder方法对该类的属性回复