国产河南妇女毛片精品久久久_深夜福利久久_色婷婷综合久久久久_亚洲高清在线播放

音樂小程序開發名字(音樂小程序研究意義)

副標題
2023-06-15 18:42:06 作者:網絡來源:網絡

  原文音樂小程序開發名字:http://www.jianshu.com/p/4ef3d3737661?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io

  作者:故胤道長

  在 iOS 開發中,寫一個 App 很容易,但是要寫好一個 App,確是要下另一番功夫。首先,我們來看一個 App 的開發要求:

  寫一個 App,顯示出 Spotify 上 Lady Gaga 相關的所有音樂專輯,相關信息可以通過以下網址查到:

  https://api.spotify.com/v1/search?q=lady+gaga&type=album

需求分析

  首先拿到開發要求,最重要的是明確開發細節。這里面有很多我們不清楚的地方需要與產品經理和設計師交流:顯示是要用 TableView 還是 CollectionView?每個音樂專輯的哪些信息需要顯示?如果專輯數量過多,我們優先顯示哪些專輯?這個 App 除音樂小程序開發名字了顯示信息以外,還需要哪些拓展功能?這個產品的大小是否有要求?需要多少天完成?

  經過討論之后,大家的一致意見是做個如下的 App:

  LadyGaga

  于是我們就清楚了,是要做一個 tableView,每個 Cell 對應一個專輯信息,左邊是圖片,右邊是專輯名。點擊 Cell,可以看到相應的專輯大圖。

  構建架構

  首先這個 App 比較簡單,我們只要用最基本的 MVC就可做好。

Model 部分:

  只需要一個 Model, 為 Album,對應每一個專輯的信息;

View 部分:

  主體的部分可以在 Storyboard 里面完成;

  最好單獨新建一個 UITableViewCell 的子類,用來對應設置專輯的UI;

ViewController 部分:

  其中一個 ViewController 為 TableViewController,負責現實所有專輯的信息;

  另一個 ViewController 負責展示 detail info,比如專輯的大圖;

Network 部分:

  負責從網絡上 fetch 專輯信息;以及根據專輯的圖片網址,fetch 圖片數據;

  基本架構

  細節實現

Network 部分:

  fetchAlbums 和 downloadImage 都用Apple 自帶的 URLSession 和 JSONserialization 就可以實現,或者也可以用優秀的第三方庫 AlamoFire。因為這個 App 比較簡單,AlamoFire 優勢不明顯,且引入第三方庫會增加 App 的體積,故而推薦使用前者。基本上就是實現下面兩個函數:

  funcfetchAlbums(with url: String, completion : @escaping (_ albums: [Album]?, _ error : NSError?) -> Void) funcdownloadImage(_ url: String) -> UIImage?

  對于第一個函數 fetchAlbums,因為網絡請求是耗時耗力的工作,我們一般會將它們用后臺線程而非主線程(UI線程)來處理,這樣可以保持UI的流暢運行。用閉包則是為了異步多線程完成后可以回調,同時 error 是為了監視網絡請求是否出錯。

  對于第二個函數 downloadImage,最簡單的方法是通過 url 拿到對應的 data,然后通過相應的 data 拿到 image。返回為 optional 的原因是有可能 URL 有問題或者網絡請求出錯,此時返回 nil。

  從API設計的角度來說,以上的downloadImage并不是最佳設計。最佳的設計是我們能知道哪里出錯了,比如下面這樣:

  enumDownloadImageError: Error{ caseInvalidURLcaseInvalidData}funcdownloadImage(_ url: String)throws -> UIImage { guardlet aUrl = URL(string: url) else { throwDownloadImageError.InvalidURL } do { let data = tryData(contentsOf: aUrl) iflet image = UIImage(data: data) { return image } else { throwDownloadImageError.InvalidData } } catch { throwDownloadImageError.InvalidURL } }

音樂小程序開發名字(音樂小程序研究意義)

ViewController 部分:

  對于 AlbumsController,我們用到了代理模式(Delegate),即將 tableView 代理到了 AlbumsController 上。我們只要實現相應的 dataSource 和 delegate 方法即可。其中對于 dataSource 而言,有兩個方法是必須實現的,它們是:

  functableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> IntfunctableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell

  同時,AlbumsController 里面,還有兩個數組,一個用來裝專輯([Album]),一個用來裝圖片([UIImage?]),這樣我們只需下載數據一次,并將其存入相應數組,之后就無需再次進行相關的網絡請求了。也就是說,這兩個數組起到了緩存的作用。

  具體的實現是:首先在 viewDidLoad() 中請求服務器取出相應的數據。之后根據專輯數量設定 TableView 的相應行數。在具體的一行當中,我們可以根據 indexPath 確定相應的專輯。根據相應專輯的圖片 URL ,我們可以拿到相應的圖片,之后緩存進圖片數組。由于我們復用了 TableView 的 Cell,所以如果不緩存圖片而每次去進行網絡請求,會因為延時很嚴重而會造成圖片閃爍的后果。

  最后兩個 ViewController 之間的跳轉可以用 navigationController 來實現。

View 部分:

  自定義 AlbumCell 可以保證 App 的擴展性很好。同時,為了處理有些專輯名字過長 Label 顯示不了的問題,可以用autoshrink 來處理。

  App 運行流程

  優化拓展

  上面的設計和實現比較理想化,現在我們要考慮一個邊界情況,假如網絡不穩定,怎么辦?

  一個簡單的解決方法就是,當網絡好的時候把數據下載下來,存入 cache 和 storage 中,之后即使網絡中斷、App 崩潰,我們都能從 storage 中拿到相應數據。

  這里引入外觀模式(Facade),創建一個新的 class 名為 LibraryAPI,提供兩個接口:

  funcgetAlbums(completion : @escaping (_ albums: [Album]?, _ error : NSError?) -> Void)funcgetImage(_ url: String) throws-> UIImage

  這里的方法跟之前 Network 的不同之處在于:getAlbums 方法會先嘗試從 storage 中取出相應數據,如果沒有,則去訪問 Network,之后再把從 Network 中拿到的值存入 storage 中。這里面的實現有點復雜,牽涉到兩大模塊和多線程操作,但是我們并不必關心方法內部的實現,而僅僅關心接口,這就是外觀模式的優點。同時,LibraryAPI 這個 class 最好用單例模式(singleton),因為它應該被當做是全局 API 被各個 ViewController 來訪問,同時這樣設計也節省資源。

  優化后的 App 流程

  另外一個優化點在于,假如我們一開始拿到很多數據 —— 例如10000 個專輯,那么我們該怎么操作?

  正確的做法是分頁。我們可以先只拿20個,顯示在 TableView 上。當用戶快滑到底端的時候,我們可以再取下面20個,然后我們總共有40個在內存中可以顯示,以此類推。這樣做的好處是,我們無需下載所有的數據,以最快、最流暢的方式布局 TableView,同時根據用戶的需求增加相應的專輯數據。

  最后一個優化點在于,假如用戶上下滑動很快,我們如何能夠用最快速度加載圖片?

  答案是用 operationQueue 來處理,當前 cell 是可見的時候,我們就 resume 下載圖片的進程,否則就 suspend。這樣保證了我們用有限的內存和 CPU 去最高效的下載用戶需要、當前要見的圖片。

  值得一提的是,大家還可以借鑒 ASDK 的思路來進一步優化程序。

  總結

音樂小程序開發名字(音樂小程序研究意義)

  本文從一個簡單的 tableView App 說起,談論了開發一個 App 的4個步驟:需求分析、構建架構、細節實現、優化拓展。簡單介紹了多線程和幾種設計模式,希望對大家有所幫助。

免責聲明:本站文章除注明外均來源于網絡,如有版權或違規問題請聯系我們刪除!
我們猜你喜歡
国产河南妇女毛片精品久久久_深夜福利久久_色婷婷综合久久久久_亚洲高清在线播放
欧美制服丝袜第一页| 亚洲免费精彩视频| 国产精品高清网站| 国产精品久久久久久久久婷婷| 国产欧美日韩精品a在线观看| 狠狠久久五月精品中文字幕| 亚洲电影在线观看| 中国成人亚色综合网站| 久久99伊人| 欧美大片在线观看一区二区| 国产精品av久久久久久麻豆网| 国产乱码精品| 最新中文字幕亚洲| 香蕉成人久久| 欧美激情一二区| 国产日韩精品视频一区| 亚洲日韩第九十九页| 亚洲性色视频| 六月天综合网| 国产精品国产三级国产| 国内综合精品午夜久久资源| 99av国产精品欲麻豆| 久久激情综合网| 欧美日韩在线视频一区| 尤物99国产成人精品视频| 亚洲一区视频在线| 欧美大片国产精品| 国产一区二区成人久久免费影院| 久久女同精品一区二区| 欧美极品一区二区三区| 国产日韩成人精品| 一区二区三区 在线观看视| 久久精品视频播放| 国产精品v一区二区三区| 亚洲第一黄色| 欧美呦呦网站| 欧美日韩一区二区三区在线| 亚洲成人资源| 欧美在线视屏| 欧美性大战久久久久| 亚洲国产成人精品久久久国产成人一区 | 亚洲美女黄网| 久久午夜电影网| 国产精品视频免费一区| 日韩午夜中文字幕| 你懂的亚洲视频| 国产综合精品一区| 午夜精彩视频在线观看不卡| 欧美日韩精品免费观看视频| 亚洲国产日韩一区| 久久久综合视频| 国产丝袜一区二区| 亚洲欧美久久久| 欧美日韩在线播放一区| 亚洲欧洲日夜超级视频| 久久在线免费视频| 国内精品福利| 欧美一区亚洲二区| 国产精品美女久久久久久久| 一本大道久久精品懂色aⅴ| 欧美高清日韩| 亚洲国产精品999| 快she精品国产999| 国产专区精品视频| 欧美在线视频网站| 国产日韩欧美在线| 午夜精品久久久久久久久久久| 欧美午夜女人视频在线| 一本综合精品| 欧美日韩视频在线| 99re热这里只有精品免费视频| 欧美理论在线| 日韩视频免费观看高清在线视频 | 亚洲久久成人| 欧美国产精品久久| 亚洲国产精品ⅴa在线观看| 免费欧美高清视频| 亚洲国产精品视频一区| 免费看的黄色欧美网站| 亚洲激情欧美| 欧美精品在线观看一区二区| 亚洲精品免费在线| 欧美日韩国产色综合一二三四| 99在线精品视频在线观看| 欧美日韩精品免费看| 夜色激情一区二区| 国产精品草莓在线免费观看| 午夜久久久久久| 国产午夜精品在线观看| 久久久91精品| 亚洲第一二三四五区| 欧美激情二区三区| 一区二区三区久久网| 国产精品久久久久免费a∨| 午夜精品久久久久99热蜜桃导演| 国产欧美日韩中文字幕在线| 久久精品视频免费| 亚洲国产精品成人综合色在线婷婷| 欧美国产精品| 亚洲深夜福利| 国产日韩欧美精品| 噜噜爱69成人精品| 99国产一区| 国产精品高清在线| 欧美一区二区视频97| 在线 亚洲欧美在线综合一区| 欧美国产先锋| 亚洲一区二区三区色| 国产日产亚洲精品| 欧美77777| 亚洲一二三区在线| 国产一区在线播放| 欧美激情综合色| 亚洲欧美成人| 亚洲高清在线视频| 欧美午夜激情小视频| 欧美在线视屏| 亚洲精品视频免费观看| 国产精品日日摸夜夜摸av| 久久精品天堂| 亚洲蜜桃精久久久久久久| 国产精品中文字幕欧美| 美女福利精品视频| 亚洲午夜视频| 有坂深雪在线一区| 国产精品yjizz| 久久爱www.| 日韩视频免费观看高清完整版| 国产欧美日韩综合精品二区| 欧美成人精品| 香蕉精品999视频一区二区| 亚洲大片在线观看| 国产精品亚洲视频| 欧美肥婆bbw| 午夜视频在线观看一区二区| 亚洲国产精品成人精品| 国产精品美女www爽爽爽| 老司机精品视频一区二区三区| 亚洲素人在线| 亚洲第一综合天堂另类专| 国产精品扒开腿爽爽爽视频| 农夫在线精品视频免费观看| 亚洲欧美日韩精品久久奇米色影视| 亚洲高清不卡一区| 国产精品中文在线| 欧美激情二区三区| 久久久久久日产精品| 99视频一区二区| 伊伊综合在线| 国产美女诱惑一区二区| 欧美人成在线| 老司机一区二区| 亚洲欧美久久久| 日韩午夜电影在线观看| 激情欧美亚洲| 国产乱码精品| 欧美日韩一本到| 免费影视亚洲| 久久精品视频导航| 午夜精品视频| 亚洲视频欧洲视频| 亚洲日本中文字幕免费在线不卡| 国语自产精品视频在线看8查询8 | 黑人巨大精品欧美黑白配亚洲 | 国产精品成人免费| 欧美激情一区二区久久久| 久久久久国色av免费看影院| 亚洲欧美影院| 一区二区三区四区蜜桃| 亚洲欧洲日本一区二区三区| 激情久久综艺| 国产一区二区激情| 国产精品一区二区久久| 欧美视频中文在线看| 欧美精品亚洲精品| 欧美xart系列高清| 卡一卡二国产精品| 久久久精品国产免费观看同学| 亚洲欧美在线观看| 亚洲一区二区三区视频| 一区二区三区回区在观看免费视频| 亚洲精品韩国| 亚洲日韩视频| 亚洲毛片av| 亚洲毛片在线免费观看| 亚洲人成精品久久久久| 亚洲国产精品尤物yw在线观看 | 狠狠爱成人网| 国产亚洲网站| 国产伦精品一区| 国产精品制服诱惑| 国产精品尤物福利片在线观看| 国产精品视频免费在线观看| 国产精品成人免费视频| 欧美亚州韩日在线看免费版国语版| 欧美午夜激情视频| 欧美午夜性色大片在线观看| 欧美午夜在线一二页| 欧美午夜在线视频| 欧美香蕉大胸在线视频观看| 国产精品分类| 国产精品中文在线| 国产一区二区欧美日韩| 国内揄拍国内精品少妇国语|