美文网首页
iOS 零星小知识

iOS 零星小知识

作者: 蒲耳 | 来源:发表于2016-10-09 11:22 被阅读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注册到操作队列里。

    相关文章

      网友评论

          本文标题:iOS 零星小知识

          本文链接:https://www.haomeiwen.com/subject/tempyttx.html