ios写文件|IOS开发写入文件路径问题

1. IOS开发写入文件路径问题

NSString *path=[NSString stringWithFormat:@"%@/livefile.%@",[[NSBundle mainBundle] resourcePath],[[rl path] pathExtension]];BOOL isosd = [dd writeToURL:[NSURL URLWithString:path] options:NSDataWritingAtomic error:&error1];这样写文件如果在非越狱机上调试 会失败 提示用户权限有问题 这样应该是违背了所谓的沙箱原理NSArray *paths = (NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0];NSString *writableDBPath = [documentsDirectory :@"livefile.mp3"];BOOL isosd = [dd writeToFile:writableDBPath atomically:YES];这样些则无问题!

2. 怎么把一个IOS文件写到U盘上,然后把U盘变成一个随身系统,win7的镜像

大白菜电脑店深度都可以哦。。。这个不能用iso镜像哦你要是想制作移动的操作系统要把操作系统安装到U盘或者是用pe

3. ios本地写文件 应该在主线程么

大家都知道,在开发过程中应该尽可能减少用户等待时间,让程序尽可能快的完成运算。可是无论是哪种语言开发的程序最终往往转换成汇编语言进而解释成机器码来执行。但是机器码是按顺序执行的,一个复杂的多步操作只能一步步按顺序逐个执行。改变这种状况可以从两个角度出发:对于单核处理器,可以将多个步骤放到不同的线程,这样一来用户完成UI操作后其他后续任务在其他线程中,当CPU空闲时会继续执行,而此时对于用户而言可以继续进行其他操作;对于多核处理器,如果用户在UI线程中完成某个操作之后,其他后续操作在别的线程中继续执行,用户同样可以继续进行其他UI操作,与此同时前一个操作的后续任务可以分散到多个空闲CPU中继续执行(当然具体调度顺序要根据程序设计而定),及解决了线程阻塞又提高了运行效率。苹果从iPad2 开始使用双核A5处理器(iphone中从iPhone 4S开始使用),A7中还加入了协处理器,如何充分发挥这些处理器的性能确实值得思考。今天将重点分析iOS多线程开发:多线程简介 iOS多线程 NSThread解决线程阻塞问题 多线程并发 线程状态 扩展-NSObject分类扩展 NSOperationNSInvocationOperation NSBlockOperation 线程执行顺序 GCD串行队列 并发队列 其他任务执行方法 线程同步NSLock同步锁 @synchronized代码块 扩展–使用GCD解决资源抢占问题 扩展–控制线程通信 总结目 录多线程简介当用户播放音频、下载资源、进行图像处理时往往希望做这些事情的时候其他操作不会被中断或者希望这些操作过程中更加顺畅。在单线程中一个线程只能做一件事情,一件事情处理不完另一件事就不能开始,这样势必影响用户体验。早在单核处理器时期就有多线程,这个时候多线程更多的用于解决线程阻塞造成的用户等待(通常是操作完UI后用户不再干涉,其他线程在等待队列中,CPU一旦空闲就继续执行,不影响用户其他UI操作),其处理能力并没有明显的变化。如今无论是移动操作系统还是PC、服务器都是多核处理器,于是“并行运算”就更多的被提及。一件事情我们可以分成多个步骤,在没有顺序要求的情况下使用多线程既能解决线程阻塞又能充分利用多核处理器运行能力。下图反映了一个包含8个操作的任务在一个有两核心的CPU中创建四个线程运行的情况。假设每个核心有两个线程,那么每个CPU中两个线程会交替执行,两个CPU之间的操作会并行运算。单就一个CPU而言两个线程可以解决线程阻塞造成的不流畅问题,其本身运行效率并没有提高,多CPU的并行运算才真正解决了运行效率问题,这也正是并发和并行的区别。当然,不管是多核还是单核开发人员不用过多的担心,因为任务具体分配给几个CPU运算是由系统调度的,开发人员不用过多关心系统有几个CPU。开发人员需要关心的是线程之间的依赖关系,因为有些操作必须在某个操作完成完才能执行,如果不能保证这个顺序势必会造成程序问题。iOS多线程在iOS中每个进程启动后都会建立一个主线程(UI线程),这个线程是其他线程的父线程。由于在iOS中除了主线程,其他子线程是独立于Cocoa Touch的,所以只有主线程可以更新UI界面(新版iOS中,使用其他线程更新UI可能也能成功,但是不推荐)。iOS中多线程使用并不复杂,关键是如何控制好各个线程的执行顺序、处理好资源竞争问题。常用的多线程开发有三种方式:1.NSThread 2.NSOperation 3.GCD三种方式是随着iOS的发展逐渐引入的,所以相比而言后者比前者更加简单易用,并且GCD也是目前苹果官方比较推荐的方式(它充分利用了多核处理器的运算性能)。做过.Net开发的朋友不难发现其实这三种开发方式 刚好对应.Net中的多线程、线程池和异步调用,因此在文章中也会对比讲解。NSThreadNSThread是轻量级的多线程开发,使用起来也并不复杂,但是使用NSThread需要自己管理线程生命周期。可以使用对象方法+ (void)detachNewThreadSelector:(SEL)selector toTarget:(id)target withObject:(id)argument直接将操作添加到线程中并启动,也可以使用对象方法- (instancetype)initWithTarget:(id)target selector:(SEL)selector object:(id)argument 创建一个线程对象,然后调用start方法启动线程。解决线程阻塞问题在资源下载过程中,由于网络原因有时候很难保证下载时间,如果不使用多线程可能用户完成一个下载操作需要长时间的等待,这个过程中无法进行其他操作。下面演示一个采用多线程下载图片的过程,在这个示例中点击按钮会启动一个线程去下载图片,下载完成后使用UIImageView将图片显示到界面中。可以看到用户点击完下载按钮后,不管图片是否下载完成都可以继续操作界面,不会造成阻塞。//// NSThread实现多线程// MultiThread//// Created by Kenshin Cui on 14-3-22.// Copyright (c) 2014年 Kenshin Cui. All rights reserved.//#import "KCMainViewController.h"@interface KCMainViewController (){ UIImageView *_imageView;}@end@implementation KCMainViewController- (void)viewDidLoad { [super viewDidLoad]; [self layoutUI];}#pragma mark 界面布局-(void)layoutUI{ _imageView =[[UIImageView alloc]initWithFrame:[UIScreen mainScreen].applicationFrame]; _imageView.contentMode=; [self.view addSubview:_imageView]; UIButton *button=[UIButton buttonWithType:UIButtonTypeRoundedRect]; button.frame=CGRectMake(50, 500, 220, 25); [button setTitle:@"加载图片" forState:UIControlStateNormal]; //添加方法 [button addTarget:self action:@selector(loadImageWithMultiThread) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:button];}#pragma mark 将图片显示到界面-(void)updateImage:(NSData *)imageData{ UIImage *image=[UIImage imageWithData:imageData]; _imageView.image=image;}#pragma mark 请求图片数据-(NSData *)requestData{ //对于多线程操作建议把线程操作放到@autoreleasepool中 @autoreleasepool { NSURL *url=[NSURL URLWithString:@"http://images.apple.com/iphone-6/overview/images/biggest_right_large.png"]; NSData *data=[NSData dataWithContentsOfURL:url]; return data; }}#pragma mark 加载图片-(void)loadImage{ //请求数据 NSData *data= [self requestData]; /*将数据显示到UI控件,注意只能在主线程中更新UI, 另外performSelectorOnMainThread方法是NSObject的分类方法,每个NSObject对象都有此方法, 它调用的selector方法是当前调用控件的方法,例如使用UIImageView调用的时候selector就是UIImageView的方法 Object:代表调用方法的参数,不过只能传递一个参数(如果有多个参数请使用对象进行封装) waitUntilDone:是否线程任务完成执行 */ [self performSelectorOnMainThread:@selector(updateImage:) withObject:data waitUntilDone:YES];}#pragma mark 多线程下载图片-(void)loadImageWithMultiThread{ //方法1:使用对象方法 //创建一个线程,第一个参数是请求的操作,第二个参数是操作方法的参数// NSThread *thread=[[NSThread alloc]initWithTarget:self selector:@selector(loadImage) object:nil];// //启动一个线程,注意启动一个线程并非就一定立即执行,而是处于就绪状态,当系统调度时才真正执行// [thread start]; //方法2:使用类方法 [NSThread detachNewThreadSelector:@selector(loadImage) toTarget:self withObject:nil];}@end运行效果:程序比较简单,但是需要注意执行步骤:当点击了“加载图片”按钮后启动一个新的线程,这个线程在演示中大概用了5s左右,在这5s内UI线程是不会阻塞的,用户可以进行其他操作,大约5s之后图片下载完成,此时调用UI线程将图片显示到界面中(这个过程瞬间完成)。另外前面也提到过,更新UI的时候使用UI线程,这里调用了NSObject的分类扩展方法,调用UI线程完成更新。多个线程并发上面这个演示并没有演示多个子线程操作之间的关系,现在不妨在界面中多加载几张图片,每个图片都来自远程请求。大家应该注意到不管是使用+ (void)detachNewThreadSelector:(SEL)selector toTarget:(id)target withObject:(id)argument、- (instancetype)initWithTarget:(id)target selector:(SEL)selector object:(id)argument 方法还是使用- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait方法都只能传一个参数,由于更新图片需要传递UIImageView的索引和图片数据,因此这里不妨定义一个类保存图片索引和图片数据以供后面使用。KCImageData.h//// KCImageData.h// MultiThread//// Created by Kenshin Cui on 14-3-22.// Copyright (c) 2014年 Kenshin Cui. All rights reserved.//#import <Foundation/Foundation.h>@interface KCImageData : NSObject#pragma mark 索引@property (nonatomic,assign) int index;#pragma mark 图片数据@property (nonatomic,strong) NSData *data;@end接下来将创建多个UIImageView并创建多个线程用于往UIImageView中填充图片。KCMainViewController.m//// NSThread实现多线程// MultiThread//// Created by Kenshin Cui on 14-3-22.// Copyright (c) 2014年 Kenshin Cui. All rights reserved.//#import "KCMainViewController.h"#import "KCImageData.h"#define ROW_COUNT 5#define COLUMN_COUNT 3#define ROW_HEIGHT 100#define ROW_WIDTH ROW_HEIGHT#define CELL_SPACING 10@interface KCMainViewController (){ NSMutableArray *_imageViews;}@end@implementation KCMainViewController- (void)viewDidLoad { [super viewDidLoad]; [self layoutUI];}#pragma mark 界面布局-(void)layoutUI{ //创建多个图片控件用于显示图片 _imageViews=[NSMutableArray array]; for (int r=0; r<ROW_COUNT; r++) { for (int c=0; c<COLUMN_COUNT; c++) { UIImageView *imageView=[[UIImageView alloc]initWithFrame:CGRectMake(c*ROW_WIDTH+(c*CELL_SPACING), r*ROW_HEIGHT+(r*CELL_SPACING ), ROW_WIDTH, ROW_HEIGHT)]; imageView.contentMode=;// imageView.backgroundColor=[UIColor redColor]; [self.view addSubview:imageView]; [_imageViews addObject:imageView]; } } UIButton *button=[UIButton buttonWithType:UIButtonTypeRoundedRect]; button.frame=CGRectMake(50, 500, 220, 25); [button setTitle:@"加载图片" forState:UIControlStateNormal]; //添加方法 [button addTarget:self action:@selector(loadImageWithMultiThread) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:button];}#pragma mark 将图片显示到界面-(void)updateImage:(KCImageData *)imageData{ UIImage *image=[UIImage imageWithData:imageData.data]; UIImageView *imageView= _imageViews[imageData.index]; imageView.image=image;}#pragma mark 请求图片数据-(NSData *)requestData:(int )index{ //对于多线程操作建议把线程操作放到@autoreleasepool中 @autoreleasepool { NSURL *url=[NSURL URLWithString:@"http://images.apple.com/iphone-6/overview/images/biggest_right_large.png"]; NSData *data=[NSData dataWithContentsOfURL:url]; return data; }}#pragma mark 加载图片-(void)loadImage:(NSNumber *)index{ // NSLog(@"%i",i); //currentThread方法可以取得当前操作线程 NSLog(@"current thread:%@",[NSThread currentThread]); int i=[index integerValue]; // NSLog(@"%i",i);//未必按顺序输出 NSData *data= [self requestData:i]; KCImageData *imageData=[[KCImageData alloc]init]; imageData.index=i; imageData.data=data; [self performSelectorOnMainThread:@selector(updateImage:) withObject:imageData waitUntilDone:YES];}#pragma mark 多线程下载图片-(void)loadImageWithMultiThread{ //创建多个线程用于填充图片 for (int i=0; i<ROW_COUNT*COLUMN_COUNT; ++i) {// [NSThread detachNewThreadSelector:@selector(loadImage:) toTarget:self withObject:[NSNumber numberWithInt:i]]; NSThread *thread=[[NSThread alloc]initWithTarget:self selector:@selector(loadImage:) object:[NSNumber numberWithInt:i]]; thread.name=[NSString stringWithFormat:@"myThread%i",i];//设置线程名称 [thread start]; }}@end

4. ios怎么写自己的plist文件

创建.plist文件。 方法: 1、选中Xcode,File-New-File…; 2、在工程目录处右键,New File…; 3、选中Xcode,使用快捷方式cmd+n组合键; 4、代码创建(往后说明步骤)。 效果如图。可以选择iOS和OS X中任意一个“Resource”中的“Property List”创建并命名保存。当前名称为:usersList.plist。往.plist文件添加数据并显示 在Xcode项目中点击usersList.plist,可以打开显示usersList.plist文件中的内容。 可以在空白处右键“Add Row”添加数据或者点中“root”行,点击“+”号即可添加。一般数据类型(Type)可以选择Array、Dictionary、String等类型。同时也可以给添加的数据赋值(Value)。 除了以Property List列表形式显示外,选中usersList.plist文件,右键“Open As”-“Source Code”可以以XML格式显示。当前操作结果如图。使用代码创建.plist文件。//获取本地沙盒路径 NSArray *path = (NSDocumentDirectory, NSUserDomainMask, YES); //获取完整路径 NSString *documentsPath = [path objectAtIndex:0]; NSString *plistPath = [documentsPath :@"usersList.plist"]; NSMutableDictionary *usersDic = [[NSMutableDictionary alloc ] init]; //设置属性值 [usersDic setObject:@"chan" forKey:@"name"]; [usersDic setObject:@"123456" forKey:@"password"]; //写入文件 [usersDic writeToFile:plistPath atomically:YES];添加修改数据操作 添加或修改已有数据。此文件不是已有的usersList.plist文件,而是存在沙盒里面的文件。usersList.plist内容是不变的。需要查看可以到模拟器沙盒查看。//获取已有完整路径 NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"usersList" ofType:@"plist"]; NSMutableDictionary *usersDic = [[NSMutableDictionary alloc]initWithContentsOfFile:plistPath]; //设置属性值,没有的数据就新建,已有的数据就修改。 [[usersDic objectForKey:@"users"] setObject:@"逗比" forKey:@"name"]; [[usersDic objectForKey:@"users"] setObject:@"dbdbdb" forKey:@"password"]; //写入文件 [usersDic writeToFile:plistPath atomically:YES];如果是想用其他文件名称可以根据路径创建新plist文件NSString *filename=[plistPath :@"test.plist"];//已有该名称文件就不新建,没有就新建如要多层次结构代码下载地址:https://github.com/cjq002/plist.git 去点击“Download ZIP”下载。

5. c++中,ios::后面跟读写文件的方法,和ios_base::这样的是什么用法和什么语法啊,没多

ios是C++的一个类,ios_base是有关输入输出流的类的公共基类,ios继承了basic_ios类,而basic_ios又继承了ios_base,所以说ios_base也是ios类的间接基类。其中ios_base类具有静态常量in、out、binary等(在VS中ios_base类还有一个叫_Iosb的基类,这些静态成员在_Iosb中,但是C++标准没有这种说法),ios_base类也是basic_ostream、basic_istream等多个类的直接或间接基类。从这个意义上,写ostream::binary什么的可能也没什么问题,但是习惯上都用ios::in、ios::binary,或者ios_base::in、ios_base::binary之类的。所以,综上,ios类继承了ios_base类的静态成员变量in、out、binary等,所以既可以用ios,也可以用ios_base。望采纳。

6. ios 怎么把data写入文件

1://获取文件路径 NSString *path = [documentsDirectory :@"fileName"]; 2://待写入的数据 NSString *temp = @”Welcome to blog.iosxcode4.com”; int data0 = 100000; float data1 = 23.45f; 3://创建数据缓冲 NSMutableData *writer = [[NSMutableData alloc] init]; 4://将字符串添加到缓冲中 [writer appendData:[temp dataUsingEncoding:NSUTF8StringEncoding]]; 5://将其他数据添加到缓冲中 [writer appendBytes:&data0 length:sizeof(data0)]; [writer appendBytes:&data1 length:sizeof(data1)]; 6://将缓冲的数据写入到文件中 [writer writeToFile:path atomically:YES]; [writer release];

7. 怎么把IOS系统写入U盘,像光盘一样!

使用UltraISO制作系统安装闪存 使用UltraISO制作,方法非常简单。我们需要下载UltraISO和Windows 7或者XP的镜像,一个最好能大于4GB的U盘,因为Win7系统镜像写入后大约3-4GB。安装UltraISO。在安装完成UltraISO之后,WIN7中一定要右键,选择以管理员身份运行,如果直接双击有可能造成无法成功写入。XP无妨。 显示先电脑的光驱文件,我们点击文件》打开》下载好的系统ISO镜像文件▲启动UltraISO后选择打开 载入下载好的Win7或者XP镜像 ▲成功载入了Win7系统镜像 ▲在启动菜单中选择执行写入硬盘映像的命令 ▲写入的方式选择USB-HDD+或者ZIP+ HDD新式电脑的硬盘启动 ZIP旧电脑的软驱启动(推荐)便携启动提供XP或者WINDOWS7系统下得启动引导 XP镜像找XP启动引导 WIN7找WIN7的 执行“写入硬盘映像”后,在下面的列表中选择你的U盘,在“写入方式”一项中提供了USB-HDD、USB-ZIP、USB-HDD+和USB-ZIP+四种模式,其中两个带加号的为UltraISO开发的最新的提高启动兼容性的增强模式,推荐大家优先使用,如果不行再换用其他两个不带加号的模式。选择完成后,点击“写入”。▲选择写入后会有警告 继续操作即可 ▲执行写入镜像 只需等待几分钟即可完成系统U盘的制作制作完成之后,我们将U盘插在需要安装系统的电脑上,在开机初始画面的下方会有提示按哪个按键进入Boot选项(各厂商的产品进入Boot的方式不同,惠普为F9,联想、DELL为F12)。如果进入不了,则可以进入Bios进行启动项先后顺序的修改,把第一启动设备设置为制作好的U盘即可。之后就可以进入Windows 7或者XP安装过程了。不过,需要大家注意些,不一定是百分成功启动安装,有些破解的系统少了东西会形成制作成功启动不正常,出现光盘样式,除了安装系统其他的就不能操作。或者,直接跑到PE里面。

8. ios 用归档还是写文件,有区别吗

不是IOS,是ISO文件,这是一个镜象文件,用酒精120或别的虚拟光驱软件都可以制作,RAR是压缩文件。不同之处在于,你可以把ISO看成一个光盘。

9. ios 应用程序的开发文档怎么写

在app商城中就可以下载的

10. ios文件写操作和文件上传到服务器

你所阐述的问题就是指的是向服务器传一个文件。多用post请求。用自带的NSURLConnection或者ASI等都可以。你过程说的明了,不知道是具体哪个环节有问题。写文件?传文件?ios文件写操作和文件上传到服务器


赞 (0)