`
zjjzmw1
  • 浏览: 1366199 次
  • 性别: Icon_minigender_1
  • 来自: 开封
社区版块
存档分类
最新评论

iOS 37班多线程,socket,HTTP,ASIHttpRequest,等面试题总结集合

    博客分类:
  • iOS
阅读更多

 

ASIDownloadCache 设置下载缓存
它对Get请求的响应数据进行缓存(被缓存的数据必需是成功的200请求):
[ASIHTTPRequest setDefaultCache:[ASIDownloadCache sharedCache]];
当设置缓存策略后,所有的请求都被自动的缓存起来。
另外,如果仅仅希望某次请求使用缓存操作,也可以这样使用:
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setDownloadCache:[ASIDownloadCache sharedCache]];

http://www.cmdeye.com/ios/thread-197-1-1.html  这里有ASIHttpRequest 缓存的详解

缓存存储方式
你可以设置缓存的数据需要保存多长时间,ASIHTTPRequest提供了两种策略:
a,ASICacheForSessionDurationCacheStoragePolicy,默认策略,基于session的缓存数据存储。当下次运行或[ASIHTTPRequest clearSession]时,缓存将失效。
b,ASICachePermanentlyCacheStoragePolicy,把缓存数据永久保存在本地,
如:
ASIHTTPRequest *request = [ ASIHTTPRequest requestWithURL:url ];
[ request setCacheStoragePolicy:ASICachePermanentlyCacheStoragePolicy ];
另外,也可以使用clearCachedResponsesForStoragePolicy来清空指定策略下的缓存数据。
缓存其它特性
设置是否按服务器在Header里指定的是否可被缓存或过期策略进行缓存:
[[ ASIDownloadCache sharedCache ] setShouldRespectCacheControlHeaders:NO ];
设置request缓存的有效时间:
[ request setSecondsToCache:60*60*24*30 ]; // 缓存30天
可以判断数据是否从缓存读取:
[ request didUseCachedResponse ];
设置缓存所使用的路径:
[ request setDownloadDestinationPath:[[ ASIDownloadCache sharedCache ] pathToStoreCachedResponseDataForRequest:request ]];
实现自定义的缓存
只要简单的实现ASICacheDelegate接口就可以被用来使用。
使用代理请求
默认的情况下,ASIHTTPRequest会使用被设置的默认代理。但你也可以手动修改http代理:
// Configure a proxy server manually
NSURL *url = [ NSURL URLWithString:@"http://allseeing-i.com/ignore" ];
ASIHTTPRequest *request = [ ASIHTTPRequest requestWithURL:url ];
[ request setProxyHost:@"192.168.0.1" ];
[ request setProxyPort:3128 ];

// Alternatively, you can use a manually-specified Proxy Auto Config file (PAC)
// (It's probably best if you use a local file)
[request setPACurl:[NSURL URLWithString:@"file:///Users/ben/Desktop/test.pac"]];
ASIHTTPRequest, 请求的其它特性
iOS4中,当应用后台运行时仍然请求数据:
[ request setShouldContinueWhenAppEntersBackground:YES ];
是否有网络请求:
[ ASIHTTPRequest isNetworkInUse ]
是否显示网络请求信息在status bar上:
[ ASIHTTPRequest setShouldUpdateNetworkActivityIndicator:NO ];
设置请求超时时,设置重试的次数:
[ request setNumberOfTimesToRetryOnTimeout:2 ];
KeepAlive的支持:
     
// Set the amount of time to hang on to a persistent connection before it should expire to 2 minutes
[ request setPersistentConnectionTimeoutSeconds:120 ];

// Disable persistent connections entirely
[ request setShouldAttemptPersistentConnection:NO ];
cookie的支持
如果Cookie存在的话,会把这些信息放在NSHTTPCookieStorage容器中共享,并供下次使用。
你可以用[ ASIHTTPRequest setSessionCookies:nil ] ; 清空所有Cookies。
当然,你也可以取消默认的Cookie策略,而使自定义的Cookie:

软件生命周期:

1.需求分析40%——社会分析(是否违法)、资金分析、功能分析

                           ——如果没有模板根据产品说明文档   需求分析uml工具包含的图:用例图、类图、顺序图

2. 软件设计20%----数据库、核心类、UI网络、接口

3.具体编码----

4.测试

5.发布

6.维护

1.了解业务逻辑 2.测试api接口 3.分析技术难点 4.提出解决方案

 

HTTP协议详解

HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中。

 http(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式,HTTP1.1版本中给出一种持续连接的机制,绝大多数的Web开发,都是构建在HTTP协议之上的Web应用。
HTTP
协议的主要特点可概括如下:
1.
支持客户/服务器模式。
2.
简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GETHEADPOST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
3.
灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
4.
无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
5.
无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

URL

HTTP URL (URL是一种特殊类型的URI是他的子类,包含了用于查找某个资源的足够的信息)的格式如下:
http://host[":"port][abs_path]
http
表示要通过HTTP协议来定位网络资源;host表示合法的Internet主机域名或者IP地址;port指定一个端口号,为空则使用缺省端口80abs_path指定请求资源的URI;如果URL中没有给出abs_path,那么当它作为请求URI时,必须以“/”的形式给出,通常这个工作浏览器自动帮我们完成。

 

TCP/UDP区别联系

TCP---传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。 

UDP---用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快 

TCPTransmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次对话才能建立起来,我们来看看这三次对话的简单过程:1.主机A向主机B发出连接请求数据包;2.主机B向主机A发送同意连接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工作)的数据包;3.主机A再发出一个数据包确认主机B的要求同步:我现在就发,你接着吧!,这是第三次对话。三次对话的目的是使数据包的发送和接收同步,经过三次对话之后,主机A才向主机B正式发送数据。 

UDPUser Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去!  UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境。 

tcp协议和udp协议的差别 

是否连接 面向连接 面向非连接 

传输可靠性 可靠 不可靠 

应用场合 传输大量数据 少量数据 

速度

 

NSURLConnection

 

苹果公司提供了NSURLConnection进行同步异步请求,使用到类有NSURL/NSURLRequst/NSURLResponse等

同步异步请求:同步一旦发送数据程序停止用户交互知道数据请求完成。异步不会柱塞主线程而会建立一个新的线程来炒作,发布请求后依然ui交互。

服务器访问路径支持get与post:get经参数写在访问路径上安全性不高,post请求将参数写在body里安全,数据大。

 

 

ASIHTTPRequest

使用iOS SDK中的HTTP网络请求API,相当的复杂,调用很繁琐,ASIHTTPRequest就是一个对CFNetwork API进行了封装,并且使用起来非常简单的一套API,用Objective-C编写,可以很好的应用在Mac OS X系统和iOS平台的应用程序中。ASIHTTPRequest适用于基本的HTTP请求,和基于REST的服务之间的交互。

ASIHTTPRequest功能很强大,主要特色如下:(进度信息、队列请求、缓存、带宽限制、断点续传

  • l 通过简单的接口,即可完成向服务端提交数据和从服务端获取数据的工作
  • l 下载的数据,可存储到内存中或直接存储到磁盘中
  • l 能上传本地文件到服务端
  • l 可以方便的访问和操作请求和返回的Http头信息

  • l 可以获取到上传或下载的进度信息,为应用程序提供更好的体验
  • l 支持上传或下载队列,并且可获取队列的进度信息
  • l 支持基本、摘要和NTLM身份认证,在同一会话中授权凭证会自动维持,并且可以存储在KeychainMaciOS操作系统的密码管理系统)中
  • l 支持Cookie
  • l 当应用(iOS 4+)在后台运行时,请求可以继续运行
  • l 支持GZIP压缩数据
  • l 内置的ASIDownloadCache类,可以缓存请求返回的数据,这样即使没有网络也可以返回已经缓存的数据结果
  • l ASIWebPageRequest –可以下载完整的网页,包括包含的网页、样式表、脚本等资源文件,并显示在UIWebView /WebView中。任意大小的页面都可以无限期缓存,这样即使没有网络也可以离线浏览
  • l 支持客户端证书
  • l 支持通过代理发起Http请求
  • l 支持带宽限制。在iOS平台,可以根据当前网络情况来自动决定是否限制带宽,例如当使用WWAN(GPRS/Edge/3G)网络时限制,而当使用WIFI时不做任何限制
  • l 支持断点续传
  • l 支持同步和异步请求
  • 断点断点续传--------FTP(文件传输协议的简称)客户端软件断点续传指的是在下载或上传时,将下载或上传任务(一个文件或一个压缩包)人为的划分为几个部分,每一个部分采用一个线程进行上传或下载,如果碰到网络故障,可以从已经上传或下载的部分开始继续上传下载以后未上传下载的部分,而没有必要从头开始上传下载。用途可以节省时间,提高速度。

ASIHTTPrequest同步请求

NSURL *urll=[NSURL URLWithString:@"http://t2.baidu.com/it/u=2078118331,2529770785&fm=0&gp=0.jpg"];

    ASIHTTPRequest *req=[ASIHTTPRequest requestWithURL:urll];

    [req startSynchronous];

    NSError *eror=[req error];

    if (!eror) {

        NSData *dd=[req responseData];

        self.showimage.image=[UIImage imageWithData:dd];

    }

ASIHTTPrequest异步请求

 NSURL *urll=[NSURL URLWithString:@"http://t2.baidu.com/it/u=1690508666,3359236730&fm=25&gp=0.jpg"];

    ASIHTTPRequest *req=[ASIHTTPRequest requestWithURL:urll];

    [req startAsynchronous];

    req.delegate=self;

//网络代理

- (void)requestFinished:(ASIHTTPRequest *)request{

    NSData *dd=[request responseData];

    self.showimage.image=[UIImage imageWithData:dd];

}

- (void)requestFailed:(ASIHTTPRequest *)request{

    NSLog(@"错误%@",[request error]);

}

ASIHTTPrequest队列请求

- (IBAction)queueReqest:(id)sender {

    if (!self.queue) {

        self.queue=[[ASINetworkQueue alloc]init];

    }

    NSURL *uurl1=[NSURL URLWithString:@"http://i.baidu.com/yule/r/image/2010-10-07/fff464e09e8172466430657f39972d9f.jpg"];

    NSURL *uurl2=[NSURL URLWithString:@"http://pic1.hebei.com.cn/0/10/77/80/10778082_985271.jpg"];//佟丽娅

    NSURL *uurl3=[NSURL URLWithString:@"http://www.hongname.com/mxtp/z/good/lijx2/26.jpg"];//李嘉欣

    NSURL *uurl4=[NSURL URLWithString:@"http://pic3.nipic.com/20090707/2868466_000446284_2.jpg"];//张雨绮

    

    ASIHTTPRequest *req1=[ASIHTTPRequest requestWithURL:uurl1];

    ASIHTTPRequest *req2=[ASIHTTPRequest requestWithURL:uurl2];

    ASIHTTPRequest *req3=[ASIHTTPRequest requestWithURL:uurl3];

    ASIHTTPRequest *req4=[ASIHTTPRequest requestWithURL:uurl4];

    

    //请求自带的字典用于辨别请求

    req1.userInfo=[NSDictionary dictionaryWithObject:@"req1" forKey:@"name"];

    req2.userInfo=[NSDictionary dictionaryWithObject:@"req2" forKey:@"name"];

    req3.userInfo=[NSDictionary dictionaryWithObject:@"req3" forKey:@"name"];

    req4.userInfo=[NSDictionary dictionaryWithObject:@"req4" forKey:@"name"];

    

    self.queue.delegate=self;

    [queue setRequestDidFinishSelector:@selector(dofinish:)];//设置请求结束时进的方法

    [queue setRequestDidFailSelector:@selector(dofail:)];//设置队列请求失败的方法

//    queue.maxConcurrentOperationCount=1;

    [queue addOperation:req1];

    [queue addOperation:req2];

    [queue addOperation:req3];

    [queue addOperation:req4];

    [self.queue go];//启动请求队列

}

-(void)dofinish:(ASIHTTPRequest *)sender{

    NSLog(@"次数");

    NSString *temp=[sender.userInfo objectForKey:@"name"];

    NSData *dd=[sender responseData];

    if ([temp isEqualToString:@"req1"]) {

        NSLog(@"1temp%@",temp);

//        NSData *dd=[sender responseData];

        self.showimage.image=[UIImage imageWithData:dd];

    }else

    if ([temp isEqualToString:@"req2"]) {

        NSLog(@"2temp%@",temp);

//        NSData *dd=[sender responseData];

        self.imageview2.image=[UIImage imageWithData:dd];    

    }else

    if ([temp isEqualToString:@"req3"]) {

        NSLog(@"3temp%@",temp);

//        NSData *dd=[sender responseData];

        self.imageview3.image=[UIImage imageWithData:dd];    

    }else

    if ([temp isEqualToString:@"req4"]) {

        NSLog(@"4temp%@",temp);

//        NSData *dd=[sender responseData];

        self.imageview4.image=[UIImage imageWithData:dd];    

    }

}

-(void)dofail:(ASIHTTPRequest *)requs{

    NSLog(@"%@",[requs error]);

}

 

 

 

socket连接和http连接的区别

简单说,你浏览的网页(网址以http://开头)都是http协议传输到你的浏览器的, http是基于socket之上的。socket是一套完成tcpudp协议的接口。

HTTP协议:简单对象访问协议,对应于应用层  HTTP协议是基于TCP连接的

tcp协议:    对应于传输层

ip协议:     对应于网络层
TCP/IP
是传输层协议,主要解决数据如何在网络中传输;而HTTP是应用层协议,主要解决如何包装数据。

Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。

http连接:http连接就是所谓的短连接,即客户端向服务器端发送一次请求,服务器端响应后连接即会断掉;

socket连接:socket连接就是所谓的长连接,理论上客户端和服务器端一旦建立起连接将不会主动断掉;但是由于各种环境因素可能会是连接断开,比如说:服务器端或客户端主机down了,网络故障,或者两者之间长时间没有数据传输,网络防火墙可能会断开该连接以释放网络资源。所以当一个socket连接中没有数据的传输,那么为了维持连接需要发送心跳消息~~具体心跳消息格式是开发者自己定义的

我们已经知道网络中的进程是通过socket来通信的,那什么是socket呢?socket起源于Unix,而Unix/Linux基本哲学之一就是一切皆文件,都可以用打开open –> 读写write/read –> 关闭close”模式来操作。我的理解就是Socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/IO、打开、关闭),这些函数我们在后面进行介绍。

 

Socket连接与HTTP连接

我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数据内容,如果想要使传输的数据有意义,则必须使用到应用层协议,应用层协议有很多,比如HTTPFTPTELNET等,也可以自己定义应用层协议。WEB使用HTTP协议作应用层协议,以封装HTTP文本信息,然后使用TCP/IP做传输层协议将它发到网络上。
1)Socket
是一个针对TCPUDP编程的接口,你可以借助它建立TCP连接等等。而TCPUDP协议属于传输层 
 
http是个应用层的协议,它实际上也建立在TCP协议之上。 

 (HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。)

 2Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,从而形成了我们知道的一些最基本的函数接口。

下面是一些的重要的概念,特在此做摘抄和总结。

一。什么是TCP连接的三次握手

第一次握手:客户端发送syn(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYNack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYNACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。断开连接时服务器和客户端均可以主动发起断开TCP连接的请求,断开过程需要经过四次握手(过程就不细写了,就是服务器和客户端交互,最终确定断开)

二。利用Socket建立网络连接的步骤

建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket ,另一个运行于服务器端,称为ServerSocket

套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。

1。服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。

2。客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。

3。连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,双方就正式建立连接。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。

三。HTTP链接的特点

HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用。

HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为一次连接

四。TCPUDP的区别

1TCP是面向链接的,虽然说网络的不安全不稳定特性决定了多少次握手都不能保证连接的可靠性,但TCP的三次握手在最低限度上(实际上也很大程度上保证了)保证了连接的可靠性;而UDP不是面向连接的,UDP传送数据前并不与对方建立连接,对接收到的数据也不发送确认信号,发送端不知道数据是否会正确接收,当然也不用重发,所以说UDP是无连接的、不可靠的一种数据传输协议。

2。也正由于1所说的特点,使得UDP的开销更小数据传输速率更高,因为不必进行收发数据的确认,所以UDP的实时性更好。

 

 

 

 

 

进程与线程

进程(process是一块包含了某些资源的内存区域。操作系统利用进程把它的工作划分为一些功能单元。

进程中所包含的一个或多个执行单元称为线程(thread)。进程还拥有一个私有的虚拟地址空间,该空间仅能被它所包含的线程访问。

通常在一个进程中可以包含若干个线程,它们可以利用进程所拥有的资源。

在引入线程的操作系统中,通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位。

由于线程比进程更小,基本上不拥有系统资源,故对它的调度所付出的开销就会小得多,能更高效的提高系统内多个程序间并发执行的程度。

简而言之,一个程序至少有一个进程,一个进程至少有一个线程.一个程序就是一个进程,而一个程序中的多个任务则被称为线程。

 

线程只能归属于一个进程并且它只能访问该进程所拥有的资源。当操作系统创建一个进程后,该进程会自动申请一个名为主线程或首要线程的线程。应用程序(application)是由一个或多个相互协作的进程组成的。

另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。

进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.
线程是进程的一个实体,CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.
一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行.

 

 

 

多线程

多线程编程是防止主线程堵塞,增加运行效率等等的最佳方法。而原始的多线程方法存在很多的毛病,包括线程锁死等。在Cocoa中,Apple提供了NSOperation这个类,提供了一个优秀的多线程编程方法。

本次介绍NSOperation的子集,简易方法的NSInvocationOperation

 

一个NSOperationQueue 操作队列,就相当于一个线程管理器,而非一个线程。因为你可以设置这个线程管理器内可以并行运行的的线程数量等等

 

 

多线程

NSInvocationOperation *op1=[[NSInvocationOperation alloc]initWithTarget:self selector:@selector(imageloadWithstr:) object:@"1"];

    NSInvocationOperation *op2=[[NSInvocationOperation alloc]initWithTarget:self selector:@selector(imageloadWithstr:) object:@"2"];

    NSInvocationOperation *op3=[[NSInvocationOperation alloc]initWithTarget:self selector:@selector(imageloadWithstr:) object:@"3"];

    NSInvocationOperation *op4=[[NSInvocationOperation alloc]initWithTarget:self selector:@selector(imageloadWithstr:) object:@"4"];

    NSOperationQueue *queue=[[NSOperationQueue alloc]init];

    [queue setMaxConcurrentOperationCount:1];

    [queue addOperation:op4];

    [queue addOperation:op1];

    [queue addOperation:op2];

    [queue addOperation:op3];

-(void)imageloadWithstr:(NSString*)str{

    if ([str isEqualToString:@"1"]) {

        NSLog(@"%@",str);

        NSURL *url=[NSURL URLWithString:@"http://t3.baidu.com/it/u=3552717391,440053905&fm=25&gp=0.jpg"];

        NSData *data=[NSData dataWithContentsOfURL:url];

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

    }

    if([str isEqualToString:@"2"]){

        NSLog(@"%@",str);

        NSURL *url=[NSURL URLWithString:@"http://t1.baidu.com/it/u=3358554441,183798980&fm=25&gp=0.jpg"];

        NSData *data=[NSData dataWithContentsOfURL:url];

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

    }

    if([str isEqualToString:@"3"]){

        NSLog(@"%@",str);

        NSURL *url=[NSURL URLWithString:@"http://t1.baidu.com/it/u=3476554757,4051152355&fm=25&gp=0.jpg"];

        NSData *data=[NSData dataWithContentsOfURL:url];

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

    }

    if([str isEqualToString:@"4"]){

        NSLog(@"%@",str);

        NSURL *url=[NSURL URLWithString:@"http://t2.baidu.com/it/u=1357814838,2747965612&fm=25&gp=0.jpg"];

        NSData *data=[NSData dataWithContentsOfURL:url];

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

    }

}

 

 

 

 

存储过程比普通sql语句运行速度快是因为存储过程是编译好的sql语言。

TCP/UDP的理解和区别

TCP---传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。 

UDP---用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快 

 

HTTP协议的理解

超文本传输协议 (Hypertext transfer protocol)是分布式,协作式,超媒体系统应用之间的通信协议。是万维网(world wide web)交换信息的基础。HTTP工作在TCP/IP协议体系中的TCP协议上的

HTTP协议的主要特点可概括如下

1、支持客户/服务器模式。也就是C/S模式。

2 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GETHEADPOST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

3、灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。

4、无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

5、无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。

另一方面,在服务器不需要先前信息时它的应答就较快。

 

oc语法里的@perpoerty不用写@synzhesize了,自动填充了。并且的_name;

写方法时候不用提前声明。llvm 全局方法便利。

枚举类型。enum hello:Integer{  } 冒号后面直接可以跟类型,以前是:

enum hello{} 后面在指定为Integer .

桥接。ARC 自动release retain 的时候 CFString CFArray . Core Fountion. 加上桥接_brige  才能区分CFString 和NSString 而现在自动区分了,叫固定桥接。

 

下拉刷新封装好了。

UICollectionViewController. 可以把表格分成多列。

 

Social Framework(社交集成)

UIActivityViewController来询问用户的社交行为

 

缓存:就是存放在临时文件里,比如新浪微博请求的数据,和图片,下次请求看这里有没有值。


 

 

 

 

1
0
分享到:
评论

相关推荐

    ASIHttpRequest ios开发框架

    虽然ASIHttpRequest在过去是很多iOS开发者的选择,但随着Apple推出官方的URLSession API(在iOS 7中引入),以及第三方库如Alamofire的流行,ASIHttpRequest的更新和维护已经逐渐停滞。然而,对于仍在使用iOS 6及更...

    IOS应用源码之【应用】ASIHTTPRequest-强大的HTTP包装开源项目.rar

    ASIHTTPRequest提供了一套完整的请求管理机制,包括异步请求、上传/下载进度跟踪、自动处理cookies等功能,让开发者能更高效地构建网络功能丰富的iOS应用。 二、核心特性 1. **异步请求**:ASIHTTPRequest支持异步...

    IOS 多线程异步下载,断点续传

    总结,iOS应用在进行文件下载时,使用多线程异步下载可以提升用户体验,结合断点续传技术,即使在网络不稳定的情况下也能保证下载的连续性。同时,通过显示进度条和字节数,可以让用户清晰地了解下载状态。最后,...

    IOS ASIHttpRequest资源包

    ASIHTTPRequest是简单易用的,它封装了CFNetwork API。使得与Web服务器通信变得更简单。它是用Objective-C编写的,可以在MAC OS X和iPhone应用中使用。 它适用于执行基本的HTTP请求和互动(或者说是反馈)。...

    ios 多线程下载图片并显示

    总结,iOS开发中的多线程技术对于提升用户体验至关重要。通过使用ASIHttpRequest库,我们可以方便地发起HTTP请求并在线程间进行通信。同时,结合自定义线程类和GCD,我们可以更好地管理和控制下载过程,确保UI的流畅...

    IOS 网络多线程详解

    ### IOS 网络多线程详解 #### 一、多线程基本概念与用法 多线程技术是现代操作系统的重要组成部分,在iOS应用开发中更是不可或缺的技术之一。多线程能够有效地提高CPU的利用率,避免主线程阻塞,从而确保用户界面...

    ASIHttpRequest

    ASIHTTPRequest是iOS开发中一个广泛使用的HTTP网络请求库,它基于Apple的Core Foundation框架中的CFNetwork,为开发者提供了更简洁易用的接口。这个库由Allan Odgaard创建,旨在简化iOS和Mac OS X应用程序中的网络...

    iOS的HTTP开发包ASIHTTPRequest

    ASI-HTTP-Request是通过CFNetwork API访问Web服务的一个开源封装类库包,...ASIHTTPRequest使用REST格式与Web服务进行通信,既支持基本的Http请求格式,也通过ASIFormDataRequest类可以很方便地提交POST数据和文件。

    iOS多线程编程

    本文将深入探讨iOS中的多线程编程,包括GCD(Grand Central Dispatch)、NSOperation、NSThread的使用,以及异步和同步下载、Block的运用,以及ASIHttpRequest类库的使用。 首先,GCD是Apple推出的一种多线程解决...

    改进版 iOS 网络请求类库ASIHTTPRequest

    在学习和使用 ASIHTTPRequest 时,开发者应该关注其对多线程、错误处理、网络状态检测等方面的处理,这些都是构建可靠网络应用的基础。同时,也要注意,由于 ASIHTTPRequest 已停止维护,可能不兼容最新的 iOS 版本...

    ASIHTTP+JSON+Google地图,多线程实现加载DEMO

    多线程在iOS开发中至关重要,它可以提高应用的性能和用户体验。在处理耗时操作,如网络请求或大量数据处理时,使用多线程可以确保主线程(负责UI更新)保持流畅。GCD是Apple提供的一种并发编程工具,它简化了多线程...

    ASIHTTPRequest

    ASIHTTPRequest是一个Objective-C库,专为iOS和Mac OS X平台设计,用于简化HTTP请求的处理。这个库由Alex桑德森(Alex Sandy Phipps)创建,为开发者提供了丰富的功能,便于实现网络数据的获取、下载以及相关操作。...

    iOS ASIHttpRequest 请求https

    ### iOS ASIHttpRequest 请求HTTPS详解 #### 一、概述 在iOS开发中,为了保障数据传输的安全性,经常需要使用HTTPS协议来进行网络通信。而ASIHttpRequest作为一款非常实用且简单的HTTP请求库,在处理HTTPS请求时也...

    ASIHTTPRequest+UITableView实现多个下载任务

    在iOS开发中,实现多个下载任务是常见的需求,特别是在处理数据量大或者用户需要离线浏览的情况下。本项目使用了ASIHTTPRequest库与UITableView相结合来实现这一功能。ASIHTTPRequest是一个广泛使用的HTTP请求库,它...

    IOS应用源码之【应用】-ASIHTTPRequest-强大的HTTP包装开源项目.rar

    ASIHTTPRequest 是一个强大的 iOS 应用程序开发中的 HTTP 请求库,它为 Objective-C 开发者提供了简单易用的接口来处理网络请求。这个开源项目在 iOS 社区中备受推崇,因为它大大简化了与服务器进行数据交换的过程。...

    ASIHTTPRequest框架

    ASIHTTPRequest框架是一款经典的Objective-C库,专为iOS和Mac OS X平台设计,用于处理HTTP网络请求。这个框架的出现早于Apple的官方网络库NSURLSession,是开发者在早期进行网络编程时常用的工具。以下是对该框架的...

    asihttprequest带demo代码包

    ASIHTTPRequest 是一个流行的 iOS 和 Mac OS X 平台上的 HTTP 请求库,由 Alexey Sokolov 开发。这个库提供了一种简单的方式来发起 HTTP 请求,处理响应,并且在 Objective-C 中进行网络编程时提供了很多便利。在...

    详解iOS – ASIHTTPRequest 网络请求

    前言 使用 iOS SDK 中的 HTTP 网络请求 API,相当的复杂,调用很繁琐,...可惜作者早已停止更新,有一些潜在的 BUG 无人去解决,很多公司的旧项目里面都残留着它的身影,以前的很多 iOS 项目都是 ASI + SBJson,会不

Global site tag (gtag.js) - Google Analytics