Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
SDWebImageを1年半使ってみた
Search
ninjinkun
April 09, 2014
Technology
14k
25
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
SDWebImageを1年半使ってみた
SDWebImageのTipsです
ninjinkun
April 09, 2014
More Decks by ninjinkun
See All by ninjinkun
買収から2ヶ月でシステム統合した話
ninjinkun
0
180
Designer's and Engineer's Thinking Styles
ninjinkun
0
320
Launchable Webinar テストを効率化して生産性を上げる方法
ninjinkun
2
620
ディープリンクの 設計と実装 - iOSDC2017
ninjinkun
18
11k
スマートフォンアプリ開発における共創的な開発チーム
ninjinkun
61
19k
ReSwiftでアプリの状態管理 / Reactive Swift Meetup
ninjinkun
9
17k
フリルのアプリ開発今昔物語
ninjinkun
3
2.3k
プロトタイピング合宿によるデザインリニューアル
ninjinkun
1
3.2k
デザイナーが仕事をしやすいアプリエンジニアを考える
ninjinkun
4
760
Other Decks in Technology
See All in Technology
「重なり」は迎える側がつくる ― 人もAIエージェントも歓迎するプロダクトエンジニアリング ―
go0517go
PRO
0
250
[DroidKaigi 2026] Making UI specifications visible: Android UI development in the AI agent era supported by Compose Screenshot Testing and galleries
syarihu
0
580
【Oracle AI Spotlight ウェビナー】AWSか、Azureか、Google Cloudか。その議論にオラクルを含める意義。
oracle4engineer
PRO
2
240
少人数データチームのDevin活用実践事例
runandy16
2
440
ブラウザアプリの継続的パフォーマンスモニタリング (序) / Continuous Browser Application Performance Monitoring; Act 1
moznion
0
110
Bet AI Day 2026丨AIを「使う」から、AIが「働く」へ ― LayerXが進める「組織AI」の社会実装
layerx
PRO
3
2.6k
AIで仕事のやり方を変える
matsu7874
1
840
薬剤師(ドメインエキスパート)と一緒に育てる薬局向けAIアシスタント
kakehashi
PRO
2
110
Genie Code ワークショップ 応用編 / Genie-Code-Workshop-advanced
databricksjapan
PRO
0
360
リージョンの壁を越える、 ちょっと変わったAWSサービスの話
falken
PRO
0
260
Sony-DroidKaigi2026
sony
1
320
bet_ai_day_2026_session02
agenticsec
1
1.2k
Featured
See All Featured
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
The agentic SEO stack - context over prompts
schlessera
0
900
How to train your dragon (web standard)
notwaldorf
97
6.8k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
The Pragmatic Product Professional
lauravandoore
37
7.4k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
320
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.4k
Mobile First: as difficult as doing things right
swwweet
225
10k
My Coaching Mixtape
mlcsv
0
310
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
580
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Transcript
4%8FC*NBHFΛ ͬͯΈͨ OJOKJOLVO
4%8FC*NBHF w 8FCը૾ϩʔμʔ w ը૾Ωϟογϡ w 6**NBHF֦ு w Ξχ(*' 8FC1
IUUQHJUIVCDPNSTTEXFCJNBHF
4%8FC*NBHF w ͜ͷ͘Β͍ͰଟͷϓϩδΣΫτʹೖͯ͠ ͳ͠ w ը૾ϑΣονϟʔͷܾఆ൛ͱݴ͑Δ w ྑ͘ϝϯς͞Ε͍ͯͯ։ൃ׆ൃ
4%*NBHF$BDIF w σϑΥϧτઃఆ͕͍͚ͯΔ w σΟεΫΩϟογϡͷσϑΥϧτ&YQJSFिؒ w ϝϞϦΩϟογϡͷσϑΥϧτ্ݶͳ͠ w .FNPSZ8BSOJOH࣌ʹϝϞϦΩϟογϡফ͑Δ w
σΟεΫΩϟογϡΞϓϦͷऴྃ࣌ͱόοΫάϥϯυҠ ߦ࣌ʹআ͞ΕΔ w ͜ͷลΓࣗલͰ࣮͢ΔͱۭؾಡΉͷ͕େม
(*'BOJNBUJPO 8FC1αϙʔτ w 6**NBHFΞχ(*' 8FC1ͷมؚ͕·Ε͍ͯΔ w 6**NBHFϑΥʔϚοτʹඇґଘ w 4%8FC*NBHFೖΕΔ͚ͩͰΞχ(*'͑Δ w
ը૾μϯϩʔμʔͷҬΛ͍͑ͯΔʜ w ͚Ͳ࣮͕ࣗવͳײ͡ͳͷͰจ۟ͳ͍
ը૾ΛϑΣʔυͯ͠ද͍ࣔͤͨ͞ w σϑΥϧτͰը૾͕ͺͬͱදࣔ͞ΕΔ͚ͩ w DPNQMFUFE#MPDLΛ͏ __weak UIImageView *weakImageView = imageView;
! [imageView setImageWithURL:imageURL placeholderImage:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType) { if (cacheType != SDImageCacheTypeMemory) { [UIView transitionWithView:weakImageView duration:0.28 options:UIViewAnimationOptionTransitionCrossDissolve | UIViewAnimationOptionCurveLinear | UIViewAnimationOptionAllowUserInteraction animations:nil completion:nil]; } }];
ಡΈࠐΈʹࣦഊͨ݁͠Ռ͕ Ωϟογϡ͞Εͯ͠·͏ w 4%8FC*NBHF3FUSZ'BJMFEΛࢦఆ͢Δ w 6*5BCMF7JFX$FMMͰҰؾʹը૾Λಡ Ή߹େ͚ͯΔ [imageView setImageWithURL:imageURL
placeholderImage:nil options:SDWebImageRetryFailed];
ϩʔΧϧͷը૾Λ63-ͰҾ͖ճ͢ w ΧϝϥɺϥΠϒϥϦ͔ΒબΜͩࣸਅʹ63-Λ༩ w 4%*NBHF$BDIFʹೖΕΔ w ϑΝΠϧ͕ظݶ͖Ͱอଘ͞ΕΔ - (void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info { UIImage *editedImage = (UIImage *)info[UIImagePickerControllerEditedImage]; ! NSString *uuid = [[NSUUID UUID] UUIDString]; NSString *imageURLString = [NSString stringWithFormat:@"njkimage://images/%@.jpg", uuid]; ! [[SDImageCache sharedImageCache] storeImage:editedImage forKey:imageURLString]; ɹɹ// ͜ͷ imageURLString ΛҾ͖ճͤͲ͜Ͱը૾͕ಘΒΕΔ! }
ϩʔΧϧͷը૾Λ63-ͰҾ͖ճ͢ w .FNPSZ8BSOJOH࣌ʹղ์͢Δ͜ͱ͕ՄೳʹͳΔ w ඞཁʹͳͬͨΒ·ͨGFUDI͢ΕσΟεΫ͔Β෮ ݩ͞ΕΔ w ը૾Λෳબͯ͠Ξοϓϩʔυ͢Δ߹ʹ ϝϞϦރׇΛ͛Δ
ϩʔΧϧͷը૾Λ63-ͰҾ͖ճ͢ w 6**NBHF7JFX 8FC$BDIFͰදࣔͰ͖Δ w ϩʔΧϧσʔλͷ֬ೝը໘ͱ8FCͷσʔλΛදࣔ ͢Δը໘Λڞ௨ԽͰ͖Δ
.81IPUP#SPXTFS w ը૾ϑϧεΫϦʔϯදࣔϥΠϒϥϦ w ෦Ͱ4%8FC*NBHFΛ͍ͬͯΔ w 4%*NBHF$BDIF͕ڞ༻͞ΕΔ w લͷը໘Ͱ։͍͍ͯͨը૾ΩϟογϡΛ࠶ར༻Ͱ͖Δ
'BTU*NBHF$BDIF w 1BUI͕࡞ͬͨߴͳը૾දࣔΛ࣮ݱ͢ΔϥΠϒϥϦ w ࣄલʹ࠷దԽͨ͠ը૾Λ࡞ͬͯΩϟογϡ w ΧϦΧϦʹνϡʔχϯά͞Εͨը૾ද͕ࣔՄೳ w νϡʔχϯά෦Λ൚༻Խ͍ͯ͠ΔͨΊ"1*ෳࡶ w
εϖοΫͰେ͖ͳࣸਅΛ͵Δ͵Δಈ͔͍ͨ͠ ͳΒݕ౼͢ΔՁ͋Γ
'BTU*NBHF$BDIF w 8FC͔Βͷμϯϩʔυػೳ͍͍ͯͳ͍ w ͜͜Λ4%8FC*NBHFʹͤΔ - (void)imageCache:(FICImageCache *)imageCache wantsSourceImageForEntity:(id <FICEntity>)entity
withFormatName:(NSString *)formatName completionBlock: (FICImageRequestCompletionBlock)completionBlock { if ([entity respondsToSelector:@selector(URL)]) { NSURL *URL = [entity performSelector:@selector(URL)]; [[SDWebImageManager sharedManager] downloadWithURL:URL options:SDWebImageRetryFailed progress:nil completed: ^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished) { completionBlock(image); }]; } }
'BTU*NBHF$BDIF w ͦͷ··ͩͱॏΩϟογϡʹͳΔ w ଞͰ͍ճ͞ͳ͍ͳΒ4%*NBHF$BDIFΘͳ͍ Α͏ʹ͢Δ 4%*NBHF$BDIF 'BTU*NBHF$BDIF 4%*NBHF.BOBHFS
·ͱΊ w 4%8FC*NBHF࠷ߴ w ࣗલͷ࣮ࣺͯ·͠ΐ͏