iOS 零星小知识

2016-10-09  本文已影响0人  蒲耳

1、数组和集合的区别是  集合是无序的

2、数据库不能插入空指针,否则访问数据库时,会出错

3、数据库支持的类型  只能是这三种:NSString  NSNumber  NSData

4、存储数据的方式:归档  plist  UserDefault  数据库  coredata  生成的目录只能存的地方是沙盒

5、数据量特别大  用数据库  很难查看 用数据库语句查看    数据库保存表          稍小一点的用plist  双击就可以查看

6、数据库中自增 类型限制就是只能是整型

7、(服务器端)黄金搭档

MySql + 接口 + php  php写服务器的语言+Apache服务器  LAMP平台(免费)

MSSql + .net 语言 + windows + iis  微软全套的

嵌入式设备的数据库  sqlite(3)            轻量级数据库 access(微软的)

sqlite是弱类型  字段处可以不加类型

ls

cd ~/Desktop

sqlite3 data.db

创建表

8、下拉刷新中的上次刷新的时间  存在UserDefault中

9、沙盒  沙盒目录相互独立  不能相互访问  iOS中应用都是沙盒目录

10、  //查询 集合和数组的区别就是 前者无序

FMResultSet * set = [_db executeQuery:@"select * from USER"];//集合

/*

uid  name  score

1    叶开  99

2    傅红雪  98

*/

while ([set next]) {

//取值

//name

NSString * name = [set stringForColumn:@"name"];//取name字段的值

//int

int score = [set intForColumn:@"score"];

//data

//NSData * data = [set dataForColumn:@"image"];

//一般我们会创建一个person的对象将数据存到对象中

//[set objectForColumnIndex:@"score"];这种方法可以获取各种类型的数据 但是取出之后要转化为自己想要的类型

//int double都有自己的方法 但float只能使用这个方法

NSLog(@"%@,%d",name,score);

}

11、数据库主键 唯一键

区别:唯一键可以有多个  唯一键可以为空  主键只有一个主键不能为空

相同点:都不可以重复

1、UIImagePickerController  图片选择器

需要UIImagePickerContrllerDelegate  和 UInavigationControllerDelegate  这两个代理

2、UIImagePickerController的对象ipc

ipc.sourceType 数据源      有三个UIImagePickerControllerSourceTypePhotoLibrary,

UIImagePickerControllerSourceTypeCamera,

UIImagePickerControllerSourceTypeSavedPhotosAlbum

3、UIImagePickerContrllerDelegate  需要实现三个方法

选择照片-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info

{

_imageView.image = [info    objectForKey:UIImagePickerControllerOriginalImage];//拿到照片  然后dismiss

[picker dismissViewControllerAnimated:YES completion:nil];

}

取消选择

-(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker

{

[picker dismissViewControllerAnimated:YES completion:nil];//取消选择 就dismiss

}

4、将图片转换为NSData类型

NSData * data = UIImagePNGRepresenttation(——imageView.image);向数据库里面存图片不好 可以将图片存到沙盒中  然后将路径存到数据库里

FMDB数据库第三方库

UIActionSheetDelegate

UIImagePickerControllerDelegate

UINavigationControllerDelegate

UIWebViewDelegate  都是系统自己自带的

request.URL.absoluteString webView中请求的地址

ASIHTTPRequest  是数据请求的第三方库  是极其强劲的HTTP访问开源项目  AFNetWorking 必须在ARC下

使用ASIHTTPRequest可以很方便的进行一下操作:同步/异步方式下载数据,定义下载队列,让队列中的任务按指定的并发数来下载(队列下载必须 是异步的),提交表单,文件上传,处理cookie,设置代理,上下载进度条,重定向处理,请求与响应的GZIP,验证与授权。

异步请求

- (void)requestFinished:(ASIHTTPRequest *)request

{

// Use when fetching text data

NSString *responseString = [request responseString];

// Use when fetching binary data

NSData *responseData = [request responseData];

}

使用block

在平台支持下,ASIHTTPRequest1.8以上支持block

- (IBAction)grabURLInBackground:(id)sender

{

NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"];

__block ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];

[request setCompletionBlock:^{

// Use when fetching text data

NSString *responseString = [request responseString];

// Use when fetching binary data

NSData *responseData = [request responseData];

}];

[request setFailedBlock:^{

NSError *error = [request error];

}];

[request startAsynchronous];

}

声明request时要使用__block修饰符,这是为了告诉block不要retain request,以免出现retain循环,因为request是会retain block的。

使用队列

创建NSOperationQueue或者ASINetworkQueue队列,我们还可以设定最大并发连接数:maxConcurrentOperationCount

1. - (IBAction)grabURLInTheBackground:(id)sender

2. {

3.    if (![self queue]) {

4.       [self setQueue:[[[NSOperationQueue alloc] init] autorelease]];

5.       [self queue].maxConcurrentOperationCount = 4;

6.    }

7.

8.    NSURL *url = [NSURL URLWithString:@"http://www.dreamingwish.com"];

9.    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];

10.    [request setDelegate:self];

11.    [request setDidFinishSelector:@selector(requestDone:)];

12.    [request setDidFailSelector:@selector(requestWentWrong:)];

13.    [[self queue] addOperation:request]; //queue is an NSOperationQueue

14. }

15.

16. - (void)requestDone:(ASIHTTPRequest *)request

17. {

18.    NSString *response = [request responseString];

19. }

20.

21. - (void)requestWentWrong:(ASIHTTPRequest *)request

22. {

23.    NSError *error = [request error];

24. }

如果不设定selector,那么系统会使用默认的requestFinished: 和 requestFailed:方法

如果需要对队列里面的每个request进行区分,那么可以设定request的userInfo属性,它是个NSDictionary,或者更简单的方法是设定每个request的tag属性,这两个属性都不会被发送到服务器。

不要使用request的URL来区分每个request,因为URL可能会改变(例如重定向),如果需要使用request的URL,使用[request originalURL],这个将永远返回第一个url。

对于ASINetworkQueue

ASINetworkQueue是NSOperationQueue的子类,提供更高级的特性(ASINetworkQueue的代理函数):

• requestDidStartSelector当一个request开始执行时,这个代理函数会被调用。

• requestDidReceiveResponseHeadersSelector当队列中的request收到服务器返回的头信息时,这个代理函数会被调用。对于下载很大的文件,这个通常比整个request的完成要早。

• requestDidFinishSelector当每个request完成时,这个代理函数会被调用。

• requestDidFailSelector当每个request失败时,这个代理函数会被调用。

• queueDidFinishSelector当队列完成(无论request失败还是成功)时,这个代理函数会被调用。

ASINetworkQueues与NSOperationQueues稍有不同,加入队列的request不会立即开始执行。如果队列打开了进度 开关,那么队列开始时,会先对所有GET型request进行一次HEAD请求,获得总下载大小,然后真正的request才被执行。

向一个已经开始进行的ASINetworkQueue 加入request会怎样?

如果你使用ASINetworkQueue来跟踪若干request的进度,只有当新的request开始执行时,总进度才会进行自适应调整(向后 移动)。ASINetworkQueue不会为队列开始后才加入的request进行HEAD请求,所以如果你一次向一个正在执行的队列加入很多 request,那么总进度不会立即被更新。

如果队列已经开始了,不需要再次调用[queue go]。

当ASINetworkQueue中的一个request失败时,默认情况下,ASINetworkQueue会取消所有其他的request。要禁用这个特性,设置 [queue setShouldCancelAllRequestsOnFailure:NO]。

ASINetworkQueues只可以执行ASIHTTPRequest操作,二不可以用于通用操作。试图加入一个不是ASIHTTPRequest的NSOperation将会导致抛出错误。

取消异步请求

取消一个异步请求(无论request是由[request startAsynchronous]开始的还是从你创建的队列中开始的),使用[request cancel]即可。注意同步请求不可以被取消

安全地控制delegate防止request完成之前代理被释放

request并不retain它们的代理,所以有可能你已经释放了代理,而之后request完成了,这将会引起崩溃。大多数情况下,如果你的代理即将被释放,你一定也希望取消所有request,因为你已经不再关心它们的返回情况了。如此做:

1. // 代理类的dealloc函数

2. - (void)dealloc

3. {

4.    [request clearDelegatesAndCancel];

5.    [request release];

6.    ...

7.    [super dealloc]

登陆网页的服务器,用网络抓包工具抓取登陆信息, 想要用自定义的post发给服务器的登陆信息,直接登陆,用的是ASIFormDataRequest  *request

ASIFormDataReques实现图片上传

1. 如果是 Get ,或者参数可以简单的组成 Get 方式提交的时候, 比如  thread.php?id=123 , 就用  ASIHTTPRequest 就可以了

原因是简单

2. 如果必须是 POST ,或者参数很多,你要构造一个带参数的 URL 很麻烦的时候,就用  ASIHttpFormDataRequest

用来接受图片标示符,并且使用 AFNetworking 的 AFImageRequestOperation 下载图片。

AFN默认没有封装同步请求,如果开发者需要使用同步请求,则需要重写getPath:parameters:success:failure方法,对 AFHTTPRequestOperation进行同步处理;而ASI则是直接通过调用一个startSynchronous方法

此外AFN针对JSON、XML、PList和Image四种数据结构封装了各自处理器,开发者可以把处理器注册到操作队列中,直接在回调方法中获得格式 化以后的数据。在示例工程中就使用了JSON处理器:把AFJSONRequestOperation注册到操作队列里。

上一篇下一篇

猜你喜欢

热点阅读