Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
tableViewとcoolectionviewのパフォーマンスチューニング
Search
kichikuchi
February 02, 2017
Technology
1
610
tableViewとcoolectionviewのパフォーマンスチューニング
kichikuchi
February 02, 2017
Tweet
Share
More Decks by kichikuchi
See All by kichikuchi
swiftにおける遅延評価
kichikuchi
0
2.9k
AB Tests in Mobile App
kichikuchi
1
2k
GameplayKit, GKRandomSource, GKRandomDistribution
kichikuchi
1
290
Other Decks in Technology
See All in Technology
Agent Skillsがハーネスの垣根を超える日
gotalab555
6
4.1k
Oracle Database@Azure:サービス概要のご紹介
oracle4engineer
PRO
2
190
Lookerで実現するセキュアな外部データ提供
zozotech
PRO
0
200
ハッカソンから社内プロダクトへ AIエージェント ko☆shi 開発で学んだ4つの重要要素
leveragestech
0
110
事業の財務責任に向き合うリクルートデータプラットフォームのFinOps
recruitengineers
PRO
2
190
2025-12-18_AI駆動開発推進プロジェクト運営について / AIDD-Promotion project management
yayoi_dd
0
150
障害対応訓練、その前に
coconala_engineer
0
190
AWSに革命を起こすかもしれない新サービス・アップデートについてのお話
yama3133
0
500
20251222_サンフランシスコサバイバル術
ponponmikankan
2
140
[Neurogica] 採用ポジション/ Recruitment Position
neurogica
1
110
Introduce marp-ai-slide-generator
itarutomy
0
110
Microsoft Agent Frameworkの可観測性
tomokusaba
1
110
Featured
See All Featured
Utilizing Notion as your number one productivity tool
mfonobong
2
190
AI: The stuff that nobody shows you
jnunemaker
PRO
1
14
Git: the NoSQL Database
bkeepers
PRO
432
66k
Speed Design
sergeychernyshev
33
1.4k
Building an army of robots
kneath
306
46k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
0
950
Mobile First: as difficult as doing things right
swwweet
225
10k
4 Signs Your Business is Dying
shpigford
186
22k
Docker and Python
trallard
47
3.7k
We Have a Design System, Now What?
morganepeng
54
7.9k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
A designer walks into a library…
pauljervisheath
210
24k
Transcript
NJOOFͰ࣮ફͨ͜͠ͱ ٠ل(.01&1"#0JOD ϖύϘςοΫΧϯϑΝϨϯε 5BCMF7JFX $PMMFDUJPO7JFXͷ ύϑΥʔϚϯενϡʔχϯά
JPTΤϯδχΞ ٠ل NJOOFࣄۀ෦ϓϩμΫτνʔϜ
·ͣͪ͜ΒΛ͝ཡԼ͍͞
ϗʔϜ 5BCMF7JFX $PMMFDUJPO7JFX $PMMFDUJPO7JFX
χϡʔε 5BCMF7JFX
͓ؾʹೖΓ $PMMFDUJPO7JFX
ݕࡧ݁Ռ $PMMFDUJPO7JFX
NJOOF΄΅શͯͷը໘Ͱ 5BCMF7JFX·ͨ$PMMFDUJPO7JFX Λར༻͍ͯ͠·͢
ύϑΥʔϚϯεվળʹ ͜ΕΒͷνϡʔχϯά͕ ॏཁ
ࠓ͢͜ͱ NJOOFͰߦͬͨνϡʔχϯάํ๏Λ ࣮ྫΛڍ͛ͯհ͠·͢ ͳΊΒ͔λΠϜϥΠϯ ΧελϜΧϝϥϩʔϧ
ͳΊΒ͔λΠϜϥΠϯ
ͳΊΒ͔λΠϜϥΠϯͱ ࢭ·Βͣʹͣͬͱ ԼεΫϩʔϧͰ͖Δ
ͪͳΈʹͳΊΒ͔Ҏલɻɻɻ ϑολʔ͕දࣔ͞ΕΔ "1*ୟ͘ Ϧιʔεऔಘͨ͠Β UBCMF7JFXΛߋ৽ ࡞ݟΔຖʹ ͕ͪ࣌ؒൃੜ͍ͯͨ͠
࣮ॳظʹͬͨ͜ͱ ϑολʔ͕දࣔ͞ΕΔલʹ"1*ୟ͘ ˣ ࣍ϖʔδͷϦιʔεΛऔಘͨ͠Β UBCMF7JFXSFMPBE%BUB
SFMPBE%BUB ͢Δͱ ը໘͕Ұॠݻ·Δ
ॲཧ͕ॏ͍Օॴͷಛఆɾվળ FOE3FGSFTIJOH IFJHIU'PS3PX"U 5BCMF7JFX TJ[F'PS*UFN"U $PMMFDUJPO7JFX
FOE3FGSFTIJOH CFGPSF apiClient.download { result in switch result { case
.success: self.refreshControl.endRefreshing() self.tableView.reloadData() case .failure(_): break } } "1*Λୟ͍ͨޙৗʹFOE3FGSFTIJOH ͍ͯͨ͠
FOE3FGSFTIJOH BGUFS apiClient.download { result in switch result { case
.success: if refreshControl.isRefreshing { refreshControl.endRefreshing() } self.tableView.reloadData() case .failure(_): break } } JT3FGSFTIJOHΛར༻ͯ͠ ඞཁͳ͚࣌ͩFOE3FGSFTIJOH ͢Δ
ߴ͞ܭࢉॲཧCFGPSF func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
{ let cell = tableView.dequeueReusableCell(withIdentifier: "Cell")! return cell.frame.size.height } IFJHIU'PS3PX"UͰ DFMMΛΠϯελϯεԽ͍ͯͨ͠
ߴ͞ܭࢉॲཧBGUFS lazy var cellHeight: CGFloat = { let cell =
self.tableView.dequeueReusableCell(withIdentifier: "Cell")! return cell.frame.size.height }() func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { return cellHeight } MB[ZWBSͰDFMM)FJHIUΛఆٛ͠ DFMMͷΠϯελϯεԽΛҰ͚ͩʹͨ͠
λΠϜϥΠϯ͕ͳΊΒ͔ʹ
ΧελϜΧϝϥϩʔϧ
ΧελϜΧϝϥϩʔϧͱ Ҏલࣸਅͷબ࣌ʹ σϑΥϧτͷΧϝϥϩʔϧ Λ༻͍ͯͨ͠ͷͰ ࡞Ո͞Μ࡞ը૾Λ ొ͢Δ࣌ʹ Կ։͔ͳ͍ͱ ͍͚ͳ͔ͬͨɻɻɻ ෳͷը૾Λ ҰʹબͰ͖Δ
Χϝϥϩʔϧ
ෳબ࣌ͷৄࡉ༷ DFMMΛλοϓͨ͠Β બͨ͠ॱ൪௨Γʹ ࣈΛߋ৽͍ͨ͠
ෳબ࣌ͷৄࡉ༷ DFMMΛλοϓͨ͠Β બͨ͠ॱ൪௨Γʹ ࣈΛߋ৽͍ͨ͠ ͻͱͭΊ
ෳબ࣌ͷৄࡉ༷ DFMMΛλοϓͨ͠Β બͨ͠ॱ൪௨Γʹ ࣈΛߋ৽͍ͨ͠ ;ͨͭΊ
ෳબ࣌ͷৄࡉ༷ DFMMΛλοϓͨ͠Β બͨ͠ॱ൪௨Γʹ ࣈΛߋ৽͍ͨ͠ ΈͬͭΊ
ෳબ࣌ͷৄࡉ༷ DFMMΛλοϓͨ͠Β બͨ͠ॱ൪௨Γʹ ࣈΛߋ৽͍ͨ͠ ΑͬͭΊ
ෳબ࣌ͷৄࡉ༷ DFMMΛλοϓͨ͠Β બͨ͠ॱ൪௨Γʹ ࣈΛߋ৽͍ͨ͠ ͬͺ͜Ε ΊΔʂ
ෳબ࣌ͷৄࡉ༷ DFMMΛλοϓͨ͠Β બͨ͠ॱ൪௨Γʹ ࣈΛߋ৽͍ͨ͠ ͍ͭ͜Β ߋ৽͢Δඞཁ͕͋Δʂ
࣮ॳظʹͬͨ͜ͱ ηϧશ෦ߋ৽͍ͨ͠ ˣ ૉʹUBCMF7JFXSFMPBE%BUB
ϚγϯεϖοΫ ࣗͷJ1IPOFTͰͳ͘ಈ͍ͯͨ ˣ σϓϩΠήʔτʹ͋͛ͯΈΜͳʹ৮ͬͯΒ͏ ˣ J1IPOFTϢʔβ͞Μ͔ΒηϧΛλοϓ͢Δຖ ʹը໘͕ݻ·Δͱͷใࠂ͕ɻɻɻ
ߋ৽ॲཧΛܰ͘͢Δඞཁ͕ʂʂ
ߋ৽ͷܰྔԽ WJTJCMF$FMMT XJMM%JTQMBZDFMM
WJTJCMF$FMMTͰݟ͑ͯΔ͚ͩߋ৽ collectionView.visibleCells.forEach { cell in if let indexPath = collectionView.indexPath(for:
cell) { cell.update(with: products[indexPath.row]) } } DFMMͷߋ৽͚ͩͰ͖ΔͷͰ SFMPBE%BUB ͱൺΔͱѹతʹܰྔʂʂ
͕ͨͩ͠ɻɻɻ ΪϦΪϦը໘֎ͷ બதͷηϧ͕͋Δ ͱߋ৽Ͱ͖ͳ͍ දࣔൣғ
XJMM%JTQMBZDFMM func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath:
IndexPath) { cell.update(with: products[indexPath.row]) } DFMM͕දࣔ͞ΕΔલʹߋ৽͢Δ͜ͱͰ ߋ৽࿙ΕΛͳ͘͢ʂ
J1IPOFTͰΩϏΩϏಈ͘
ͪͳΈʹ ࠓճWJTJCMF$FMMT XJMM%JTQMBZΛ͍·͕ͨ͠
ଞʹ৭ʑ͋Δ UBCMF7JFX tableView.reloadData() tableView.reloadRows(at: [IndexPath], with: UITableViewRowAnimation) tableView.reloadSections(sections: IndexSet, with:
UITableViewRowAnimation) DPMMFDUJPO7JFX collectionView.reloadData() collectionView.reloadItems(at: [IndexPath]) collectionView.reloadSections(sections: IndexSet)
ΉΈʹSFMPBE%BUB ͤͣ ߋ৽ྖҬʹԠͯ͡ϝιουΛ ͍͚Δʂ
·ͱΊ w ೋͭͷ࣮ྫΛڍ͛ͯνϡʔχϯάํ๏Λհͨ͠ w 6*ʹؔ͢Δॲཧඞཁͳ࣌ʹ͚ͩ͢Δ w FOE3FGSFTIJOH JT3FGSFTIJOHͷ͚࣌ͩݺͿ w ߴ͞ܭࢉॲཧ
IFJHIU'PS3PX"U TJ[F'PS*UFN"U ܰྔ ʹ͢Δ w ΉΈʹSFMPBE%BUB ͠ͳ͍ w WJTJCMF$FMMT SFMPBE3PXT SFMPBE4FDUJPOTͳͲͰࡁΉ ͳΒͦͪΒͰࡁ·͢