【iOS】パフォーマンス改善で参考にした記事まとめ（随時更新）

iOS開発におけるパフォーマンス改善の際、参考にさせていただいた記事まとめです。
（思い出したり新しい記事あったら随時追加していきます）
パフォーマンスの改善ってくくりだと大雑把すぎてとっちらかるかもしれませんが
許して下さい。。
思い出したり見つけたら随時追加していこうと思っています。

こんなんあるよとか言っていただければ感謝の上、追加させていただきます。


まずは基礎
================

[パフォーマンスチューニングに関するアップルのドキュメント](http://d.hatena.ne.jp/shu223/20110827/1314520691)

まずはAppleさんの教科書的なドキュメントをまとめてくださったshu223さんの記事です。


UITableView, UICollectionView
================
[[iOS] TableView スクロールパフォーマンスの改善](http://blog.natsuapps.com/2010/10/ios-tableview_6774.html)

[なめらかに動作するUITableViewのつくりかた](http://labs.gree.jp/blog/2013/12/9669/)

[見積もりの高さでUITableViewを高速化する話。](http://qiita.com/glayash/items/92863bedc734eaa8e7ed)

大抵のアプリの本丸はUITableViewですね。
それぞれとても素晴らしい記事で感謝しています。
記事はUITableViewに関してですが、UICollectionViewでも参考になります。


Network (JSON Parse)
================

[サーバとiOSアプリのデータのやり取りを〇〇倍高速化する方法](https://techblog.zozo.com/entry/backend_ios_plist)

[iOSアプリを170倍高速化できた２つの意外な盲点](http://nanapi.co.jp/blog/2014/06/11/ios_answer_high_speed_technique/?fb_action_ids=10203892625979758&fb_action_types=og.likes&fb_source=other_multiline&action_object_map=%5B738868242818354%5D&action_type_map=%5B%22og.likes%22%5D&action_ref_map=%5B%5D)

JSONパース時に工夫することでパフォーマンスを改善した例です。
結構この２つの記事は目から鱗的なんじゃないかと思います。
先入観は捨てる。勉強になります。


CoreData
================

[CoreDataの非同期処理 - UIスレッドを止めないために](http://qiita.com/ytka/items/8835743c5a60d3ee5b44)

[Adventures in Multithreaded Core Data](http://sssslide.com/www.slideshare.net/Inferis/adventures-in-multithreaded-core-data)

[CoreData 非同期データ処理](http://sssslide.com/www.slideshare.net/hedjirog/core-data-14134061)

CoreDataを使っててパフォーマンスを改善するには避けて通れないマルチスレッド対応ですね。
昨今は上記のような素晴らしい記事が多く、助かります。


CALayer
================

[iOSにおける描画と印刷のガイド](https://developer.apple.com/jp/devcenter/ios/library/documentation/DrawingPrintingiOS.pdf)
Apple公式ドキュメントです。(PDF)

[CALayer を使って UIImage を描画する](http://akisute.com/2010/08/calayer-uiimage.html)

[CALayer を用いた「影」の描画処理を軽くするAdd Star
](http://d.hatena.ne.jp/shu223/20121124/1355146393)

[UIView の drawRect と setNeedsDisplay の関係](http://blog.f60k.com/uiview_drawrect_setneedsdisplay/)

描画のパフォーマンス向上といえば言わずもがなですね。


オープンソースを参考にする
================

[Path: スクローリング時の画像表示を早くするiOSライブラリをオープンソースで提供](http://wazanova.jp/post/64746794516/path-ios)

[SDWebImageを1年半使ってみた](http://sssslide.com/speakerdeck.com/ninjinkun/sdwebimagewo1nian-ban-shi-tutemita)
みんな使ってるSDWebImageの解説記事です。参考になります。
また、上記FastImageCacheとの連携についても書かれています。



そもそものパフォーマンス測定方法
================

[INSTRUMENTSのTIME PROFILERを使って重たいメソッドを特定する](http://tech-gym.com/2012/04/ios/732.html)

まず測れって話ですね。

[Xcode6で追加された、XCTestの新機能](http://qiita.com/nomadmonad/items/d2c283f9b9ad33a2b32a)

Xcode6からパフォーマンスを評価するためのAPIが追加されたようです。参考になります。

後から雑に追加
================

[iOS10時代のCollectionView最適化](http://qiita.com/tatetate55/items/86a2ed47c08de9b6214c)

[Method Dispatch in Swift](https://www.raizlabs.com/dev/2016/12/swift-method-dispatch/)
Swiftレターには感謝しかないですね
https://medium.com/swift-column/issue11-63c218e55371#.1kci0lgem

[iOSアプリのUX改善！ FacebookのAsyncDisplayKitで60FPSのハイパフォーマンスなiOSアプリを作る](https://developers.eure.jp/tech/ios-asdkit/)


まあ、改善しないんだけど.. → Think Different
================

[UIの改悪がUXを改善させる場合](http://blog.livedoor.jp/lunarmodule7/archives/3675720.html)

考えを変えてみるのも手かもしれませんね。
ユーザーが「どう感じる」かどうかが重要ということでしょうか。
しかしながらこの手法は定量的に評価できないので説得する人が居る場合は難しいですね。