<h2>网络</h2>
<h3>连接</h3>
<ul>
<li>使用Berkeley sockets API</li>
<li>Windows,OS X,iOS一样</li>
<li>底层API</li>
<li>网络请求的3个类
<ol>
<li> <code>NSURL</code></li>
<li> <code>NSURLRequest</code></li>
<li> <code>NSURLConnection</code></li>
</ol>
</li>
</ul>
<h3><code>NSURL</code></h3>
<ul>
<li>创建URL:
<ul>
<li><code>NSURL *myURL = [NSURL URLWithString:@"http://blahblah.com"];</code></li>
<li>提供的字符串必须是完整,格式正确的URL</li>
<li><p>格式不正确,将返回<code>nil</code></p></li>
<li><p><code>NSURL *relativeURL = [NSURL URLWithString:@"resources/index.html" relativeToURL:[NSURL URLWithString:@"http://blahblah.com/"]];</code></p></li>
<li><p>创建好URL后,可获取与它相关的信息</p>
<ul>
<li>如主机名
<ul>
<li><code>NSString *host = [relativeURL host];</code></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>可变URL:<code>NSMutableURL</code></li>
<li>本地文件也可用URL
<ul>
<li>但使用<code>file:</code>格式</li>
<li><code>file://localhost/Applications/</code></li>
<li>创建文件URL:<code>NSURL *myFileURL = [NSURL fileURLWithPath:@"/Applications/"];</code></li>
</ul>
</li>
</ul>
<h3><code>NSURLRequest</code></h3>
<ul>
<li><code>URL</code>对象,指向资源位置</li>
<li><code>NSURLRequest</code> 描述如何去访问资源,如
<ul>
<li>将无回复的请求保留多久后算超时</li>
<li>是否需要使用缓存,如何使用缓存</li>
<li>如果请求是一个HTTP请求,要使用哪种请求方法(GET, POST, PUT...),HTTP请求主体是什么</li>
</ul>
</li>
<li>只拥有一个NSURL对象
<ul>
<li><code>NSURLRequest *request = [NSRequest requestWithURL:myURL];</code></li>
</ul>
</li>
<li>拥有关于请求如何执行的更多控制
<ul>
<li><code>requestWithURL:cachePolicy:timeoutInterval:</code></li>
<li>由用户指定如何缓存下载的内容,请求在终止前需要等待视时长</li>
</ul>
</li>
<li>允许创建后进行配置
<ul>
<li><code>NSMutableURLRequest</code></li>
<li><p>如,发送<code>POST</code>请求活对请求进行修改</p>
<pre><code> NSMutableURLRequest *mutableRequest = [NSMutableURLRequest requestWithURL:myURL];
[mutableRequest setHTTPMethod:@"POST"];
</code></pre></li>
</ul>
</li>
</ul>
<h3><code>NSURLConnection</code></h3>
<ul>
<li>管理连接的生命周期</li>
<li>工作方式
<ul>
<li>接收一个<code>NSURLRequest</code>,到网络上执行该请求</li>
<li>当请求完成后,一个代码段(block)运行,传递(服务器的响应,加载的数据以及可能发生的错误,以上使用<code>NSData</code>封装)</li>
<li>用户将<code>NSData</code>对象转换为可用格式(文本,图片)</li>
</ul>
</li>
</ul>
<h3><code>NSURLResponse</code></h3>
<ul>
<li>描述服务器对请求的初始响应
<ul>
<li>下载文件的预计大小(字节为单位)</li>
<li>服务器对该文件的推荐文件名</li>
</ul>
</li>
<li><code>NSHTTPURLResponse</code>
<ul>
<li>发出的是HTTP请求,服务器的响应将是这个东西的一个实例</li>
<li>包含HTTP的状态码,服务器发送的数据包头部</li>
</ul>
</li>
<li>通常,不需要自己创建,而<em>在<code>NSURLConnection</code>对象第一次成功获取服务器发送的响应并开始下载内容后,从它那里直接获取</em></li>
</ul>