<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>