Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
パフォーマンス改善とユニットテスト
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
shtnkgm
March 26, 2019
Programming
1.8k
4
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
パフォーマンス改善とユニットテスト
Bonfire iOS #5 発表資料
shtnkgm
March 26, 2019
More Decks by shtnkgm
See All by shtnkgm
Combine入門
shtnkgm
2
330
Property Wrappers
shtnkgm
0
380
Saliency Detection
shtnkgm
0
89
iOSのコードベースレイアウト
shtnkgm
2
840
20190117_iOSLT_CBLinSwift.pdf
shtnkgm
0
130
SwiftとFunctional Reactive Programming
shtnkgm
0
200
20180710_iOSLT_iOSでDarkModeを実装する
shtnkgm
0
130
20180410_iOSLT_SwiftとProtocol-OrientedProgramming
shtnkgm
0
140
20180220_iOSLT_Swiftとオブジェクト間の通知のパターン
shtnkgm
0
170
Other Decks in Programming
See All in Programming
アクセシビリティから考える情報設計
high_g_engineer
0
430
Vue Fes Japan 2026 タイムテーブル徹底解説
448jp
1
570
速く作れる。その次は、速く確かめられる開発へ 〜AIネイティブ開発を支える、Shift Down〜 / Can build fast. Next, moving to development where we can verify fast.
rkaga
8
5.2k
20260914 AIエージェント時代のPlatform Engineering LLM基盤とプロダクトの責務境界線
kanfab1
7
2.3k
Omarchy Tokyo やると聞いて UMPC 買ってセットアップしてきた
mtsmfm
0
190
Turning Architecture into Unit Tests in the AI Era (NSSpain XIV)
steliosf
PRO
1
120
Workers Cache を知る
syumai
0
310
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
350
巨大モノリシックアプリ モダン化大作戦
ktcryomm
1
1.2k
Starting & Sustaining Code-Based E2E Testing for Non-Coding QA Teams( #jasstniigata )
teyamagu
PRO
1
750
コードレビューのボトルネックを"する側"と"される側"の両面から解消する
yub0n
1
650
技術的負債の返済は、AI時代の複利で効く投資 — 経営としての意思決定とその遂行
curekoshimizu
1
2k
Featured
See All Featured
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.2k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.3k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
480
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
250
Marketing to machines
jonoalderson
1
5.8k
What does AI have to do with Human Rights?
axbom
PRO
1
2.4k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
3.2k
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.2k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
330
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
270
The SEO identity crisis: Don't let AI make you average
varn
0
560
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
780
Transcript
#POpSFJ04ʛ!TIUOLHN ύϑΥʔϚϯεվળͱϢχοτςετ
4IPUB/BLBHBNJ ϠϑʔגࣜձࣾʛΤϯδχΞ !TIUOLHN
:BIPPγϣοϐϯά
wJ04ΞϓϦϦϦʔε wίʔυن wϢχοτςετ w୲J04ΤϯδχΞ ɿʙ ɿສߦʢ0CKFDUJWF$ɿʣ ɿ݅ʢΧόϨοδɿʣ ɿ໊ʢ Ћʣ
ݱࡏͷׂ w ύϑΥʔϚϯεվળ w ٕज़తෛ࠴ͷղফ w ։ൃޮͷվળ ʢGBTUMBOFɺ4XJGU-JOUɺ%BOHFSɺ4XJGU(FOɺ4DSFXESJWFSDEɺ1FSJQIFSZʣ ػೳ։ൃ νʔϜ
ٕज़վળ νʔϜ
ࠓ͍ͨ͜͠ͱ
:BIPPγϣοϐϯάΞϓϦͷ ύϑΥʔϚϯεվળͱ Ϣχοτςετ׆༻ͷ
˞ܭଌࣗࣾௐ 501ը໘ ΞϓϦىಈʙදࣔ·Ͱͷվળ #FGPSFɿฏۉඵ
ΞϓϦىಈʙදࣔ·Ͱͷվળ #FGPSFɿฏۉඵ ˞ܭଌࣗࣾௐ ݮ 501ը໘ "GUFSɿฏۉඵ
None
ϘτϧωοΫՕॴͷௐࠪ
"1*௨৴Ͱ ಈతʹมΘΔλϒϝχϡʔ
ىಈ͔Β501දࣔ·ͰͷྲྀΕ
ىಈ "1*௨৴ "1*௨৴ λϒදࣔ 501දࣔ
ىಈ "1*௨৴ "1*௨৴ λϒදࣔ 501දࣔ
ىಈ "1*௨৴ "1*௨৴ λϒදࣔ 501දࣔ λϒՃ
ํ0,ɺͰ
ϓϩάϥϜͷෳࡶ͕૿͢ ฒྻԽඇಉظԽʹΑΓ
վमରͷΫϥε͕طʹෳࡶ
վमରͷΫϥεΛͳ͕ΊΔ w ॳظ࣮͔Βܦ͍ͬͯΔ w मਖ਼ͷܧ͗͠ʹΑΔ'BU7$ʢߦPWFSʣ w 7JFXϏδωεϩδοΫ͕ࠞࡏ͠ɺաଟ w Ϣχοτςετ΄΅ͳ͠
Ͳ͏͢Δʁ
طଘΫϥε 'BU7$
طଘΫϥε Ճ ❌͞ΒʹංେԽ Ճ
طଘΫϥε Ϋϥε Ϋϥε Ϋϥε খ͘͞Γग़͠
طଘΫϥε Ϋϥε Ϋϥε Ϋϥε ฒྻԽॲཧ ඇಉظԽॲཧ
Ϋϥε Ϋϥε Ϋϥε طଘΫϥε ✅ ✅ ✅ Ϣχοτςετ
Ϋϥε Ϋϥε Ϋϥε طଘΫϥε ✅ ✅ ✅ ґଘΫϥεΛ֎෦͔Βઃఆ ʢ%FQFOEFODZ*OKFDUJPOʣ *OKFDU
*OKFDU
.PDL Ϋϥε .PDL Ϋϥε Ϋϥε طଘΫϥε ✅ ✅ ✅ ✅
্ҐϨΠϠʔ Ϣχοτςετ
͏গ͠۩ମతʹ w λϒϝχϡʔͷදࣔϩδοΫΛΓग़͠ɺ 4UBDL7JFXԽ w ঢ়ଶཧͱ௨৴ϩδοΫΛΓग़͠ w λϒͷछྨΛFOVNͰ࠶ཧʜͳͲ
7JFXϨΠϠʔͷϢχοτςετ
ॻ͖ʹ͍͕͘ɺ ෆ͕҆͋Εॻ͘
7JFXͷςετ͕ॻ͖ʹ͍͘ཧ༝ w νΣοΫର͕7JFXͷදࣔͱͳΔͨΊɺग़ྗΛऔಘͮ͠Β͍ ʢ҉తͳग़ྗͷνΣοΫʣ w 6*,JUͷϥΠϑαΠΫϧʹԊͬͯදࣔྃΛͭ ʢඇಉظςετʣ
// Tips: ΞΫηεम০ࢠΛมߋ͢Δ // before @IBOutlet private weak var titleLabel:
UILabel! // after @IBOutlet private(set) weak var titleLabel: UILabel!
// Tips: subviews͔ΒಛఆΫϥεViewͷΈΛऔಘ͢Δ let labels = view.findViews(subclassOf: UILabel.self) let tabViews
= view.findViews(subclassOf: TabView.self) extension UIView { var recursiveSubviews: [UIView] { return subviews + subviews.flatMap { $0.recursiveSubviews } } func findViews<T: UIView>(subclassOf: T.Type) -> [T] { return recursiveSubviews.compactMap { $0 as? T } } }
// Tips: දࣔྃͷػ func waitUntil(condition: () -> Bool) { while
!condition() { RunLoop.main.run(until: Date(timeIntervalSinceNow: 0.001)) } }
7JFXͷϢχοτςετΛ ॻ͍ͯΑ͔ͬͨ͜ͱ
Ϣχοτςετ͕௨Βͳ͍ λϒͷ͕ظ௨ΓʹͳΒͳ͍ ❌
खಈςετͰҰݟਖ਼͍͠
%FCVH7JFX)JFSBSDIZ
None
None
None
None
ݪҼ 6*4UBDL7JFXͷαϒϏϡʔͷআͷํ
6*4UBDL7JFXͰλϒΛཧ λϒͷՃɿBEE"SSBOHFE4VCWJFX @ λϒͷআɿSFNPWF"SSBOHFE4VCWJFX @
// arrangedSubviewsΛআ stackView.arrangedSubviews .forEach { stackView.removeArrangedSubview($0) } // subviewsΛআ stackView.subviews
.forEach { $0.removeFromSuperview() }
7JFXͷϢχοτςετͰ खಈςετͰؾ͖ͮʹ͍͘ ʹؾ͚ͮͨ
ৼΓฦΓ
w ϢχοτςετΛॻ͖ͳ͕ΒϦϑΝΫλͯ͠ ࠓޙϝϯς͍͢͠ίʔυʹ w खಈςετͰͷखΓ͕࠷খݶ ʢόάΛઌग़͠Ͱݕग़ʣ (
w ϩάૹ৴͍ͯ͠Δσʔλͷத͕Ұ෦ܽଛ w ϢχοτςετɺखಈςετͰݕͰ͖ͣ )
ߴԽ͗ͯ͢͠લఏ่͕݅ΕΔ w ߴԽલλΠϛϯά͕͔ͬͨͷͰɺਖ਼͘͠ಈ࡞ w ϩάૹ৴ͷλΠϛϯά͕ૣ͘ͳΓɺ ඞཁͳσʔλ͕औΕͯͳ͍ͷʹϩάૹ৴ ૹ৴σʔλͷऔಘ ϩάૹ৴˓ ϩάૹ৴º ߴԽ
Ϟδϡʔϧؒͷ҉తͳґଘؔ ϢχοτςετͰؾ͖ͮʹ͍͘
func sendLog() { assert(analyticsData.foo != nil, "foo͕औಘͰ͖͍ͯΔ͜ͱ") logger.sendLog() }
·ͱΊ
·ͱΊ w ύϑΥʔϚϯεվળͱϦϑΝΫλϦϯά Ͱ͖ΕηοτͰ w खಈςετͰؾ͚ͮͳ͍ෆ۩߹ʹ 7JFXͷςετͰؾ͚ͮͨ w Ϣχοτςετ͚ͩͰͳ͘"TTFSUJPO׆༻
͋Γ͕ͱ͏͍͟͝·ͨ͠ #POpSFJ04ʛ!TIUOLHN