๐ ์์ด-์ค-์์ค
[iOS] NSCache์ ์บ์ ์ ์ฑ
๋ฏ์ด๋ณด๊ธฐ
[iOS] NSCache์ ์บ์ ์ ์ฑ ๋ฏ์ด๋ณด๊ธฐ
2022.02.08NSCache ์ค๋์ ๊ฐ๋ฒผ์ด ์ด๋ฏธ์ง ์บ์์ ์์ฃผ ์ฌ์ฉํ์ง๋ง, ๋ฌด์ฌ์ฝ ์ฌ์ฉํด์ค๊ธฐ๋ง ํ๋ NSCache๊ฐ ๋ด๋ถ์ ์ผ๋ก ์ด๋ค ์ ์ฑ
์ ๋๊ณ ์๋์ง ํ์ธํด๋ณด๋ ค๊ณ ํฉ๋๋ค. ๊ณต์๋ฌธ์์๋ NSCache๊ฐ ๋ค์ํ ์๋ ์ ๊ฑฐ ์ ์ฑ
(auto-eviction policy)์ ์ฌ์ฉํด์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ๋ค๊ณ ์๊ฐํ๊ณ ์๋๋ฐ์, ์ด๋ค ์ ์ฑ
์ ์ฌ์ฉํ๋์ง ์๋ ค์ฃผ๊ณ ์์ง๋ ์์์. ๊ทธ๋์ Foundation์ ๋ค์ด๊ฐ๋ Objective-C ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ libs-base์์ NSCache์ ์์ค์ฝ๋๋ฅผ ์ฐพ์ ์ ์์๊ณ , ์ด ์์ค์ฝ๋๋ฅผ ๋ฏ์ด๋ณด๋ ค๊ณ ํฉ๋๋ค..! ์ ๊ฑฐ Objc๋ ๋ฆฌ๋ฉ์ ์๋ฒฝํ๊ฒ ๋ชปํด์ ํ๋ฆฐ ์ ๋ณด๊ฐ ์์ ์๋ ์์ด์..! ํท๊ฐ๋ฆฌ๋ ๋ถ๋ถ์ ์ ๋ชจ๋ฅด๊ฒ ๋ค๊ณ ๋จ๊ฒจ๋๊ฒ์! ์ฝ๋๋ ์ฌ๊ธฐ์์ ํ์ธํ ์ ์์ด์! ๊ทธ๋ผ ์์ํ๊ฒ ์ต๋๋ค! GitHub ..
[RxSwift] subscribe์ ๋์์๋ฆฌ ์ดํดํ๊ธฐ
[RxSwift] subscribe์ ๋์์๋ฆฌ ์ดํดํ๊ธฐ
2022.01.24RxSwift์ ๊ตฌ๋
์ ์ด๋ป๊ฒ ์ด๋ฃจ์ด์ง๊น? ์ง๋ ํฌ์คํธ์์๋ ์ต์ ๋ฒ๋ธ์ด ์ด๋ป๊ฒ ์์ฑ๋๋์ง create ๋ฉ์๋๋ฅผ ๋ฐ๋ผ๊ฐ๋ณด๋ฉด์ ์ ์ํด๋ณด์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ค๋์ subscribe๋ฅผ ํ๋ฉด ์ด๋ค ์ผ์ด ์ผ์ด๋๋์ง ํ์ธํด๋ณด๊ฒ ์ต๋๋ค! ์ง๋ ํฌ์คํธ๋ฅผ ์ฝ์ผ๋ฉด ๋ ์ฝ๊ฒ ์ดํดํ ์ ์์ผ๋ ํ์ธํด๋ณด์ธ์! [RxSwift] Disposables.create() ์ ํ์ง? Disposables.create ๋ถ์ํด๋ณด๊ธฐ Rx๋ฅผ ํ๋ฉด์ ๋ง์ด ๋ค์๋ ์๋ฌธ.. let numbers = Observable .create { observer in observer.onNext(1) observer.onNext(2) observer.onNext(2) return Disposables.create() } ์ฌ.. jeonyeohun.tistory.c..
[RxSwift] Observable.create์ ๋์์๋ฆฌ ์ดํดํ๊ธฐ
[RxSwift] Observable.create์ ๋์์๋ฆฌ ์ดํดํ๊ธฐ
2022.01.23Observable.create Observable์ ์ฌ์ฉํ๋ฉด์ ์ง์ง ๋ง์ด ์ฐ๋ create ๋ฉ์๋๊ฐ ์ด๋ป๊ฒ ๋์ํ๋์ง ์์๋ณด๋ ค๊ณ ํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก create์ ํด๋ก์ ๋ฅผ ์ ๋ฌํ๊ณ Observable์ ๋ฐํ๋ฐ์ต๋๋ค. let observable = Observable.create { observer in observer.onNext(1) observer.onCompleted() return Disposables.create() } observable.subscribe(...) ์ด๋ฐ์์ผ๋ก ์ฌ์ฉํ์์ฃ . ๊ทธ๋ผ ์ด๋ค ๊ณผ์ ์ผ๋ก Observable์ด ์์ฑ๋๋์ง ์์๋ด
์๋ค! ๊ฐ์ธ์ ์ผ๋ก RxSwift๋ฅผ ๊ฐ๋ตํ๊ฒ ์ฝ๋๋ก ์ฎ๊ธด ์ ์ฅ์๋ฅผ ๋ง๋ค์๋๋ฐ์, ๋ด๋ถ์ ์ผ๋ก ์์์ ์ฐ์ฐ์ด๋ ํ์ฅ์ฑ์ ๋ํ ์ง์์ด ๋ถ์กฑํ์ง๋ง ํต์ฌ์ ์ธ ๋ก์ง์..
[Swift] strong, weak, unowned์ ๋น๋ฐ
[Swift] strong, weak, unowned์ ๋น๋ฐ
2022.01.23๋ํผ๋ฐ์ค ์นด์ดํธ ์๋
ํ์ธ์! ์ค๋์ swift์์ ๋ํผ๋ฐ์ค ์นด์ดํธ๋ฅผ ์ด๋ป๊ฒ ๊ตฌํํ๊ณ ์๋์ง ์์๋ณด๋ ค๊ณ ํฉ๋๋ค. ๋ง์ ๋ธ๋ก๊ทธ์์ weak๊ณผ unowned์ ์ฐจ์ด๋ฅผ Optional์ ๊ฐ๋ฅ ์ฌ๋ถ๋ผ๊ณ ๋งํ๊ณ ์๋๋ฐ, ์ฌ์ค ํ๋ฆฐ ํํ์ด์์. Swift 5.0๋ถํฐ๋ Unowned Optional์ด ์ถ๊ฐ๋์ด์ unowned๋ ์ต์
๋์ ๊ฐ์ง ์ ์์ต๋๋ค. ๊ทธ๋์ ๋ ๋ก์ฐ ๋ ๋ฒจ๋ก ๊ฐ๋ฉด ๋ํผ๋ฐ์ค ์นด์ดํ
๊ณผ ๋ฉ๋ชจ๋ฆฌ ํด์ ์ ์์ด์ ๋ถ๋ช
๋ค๋ฅธ ๋ถ๋ถ์ด ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๊ณ , GitHub - apple/swift: The Swift Programming Language The Swift Programming Language. Contribute to apple/swift development by creating an accoun..
[iOS] ์ฑ ์๋๋ฐ์ค์ iOS์ ํ์ผ ์์คํ
[iOS] ์ฑ ์๋๋ฐ์ค์ iOS์ ํ์ผ ์์คํ
2022.01.21App Sandbox + File System ์ค๋์ ์ฑ ์๋๋ฐ์ค์ ๋ํ ๊ฐ๋
์ ์ ๋ฆฌํด๋ณด๊ณ ์ฑ ์๋๋ฐ์ค ๋ด๋ถ์์ ํ์ผ๋ค์ ์ด๋ป๊ฒ ๊ด๋ฆฌํ๊ณ ์๋์ง ๊ณต์๋ฌธ์๋ฅผ ํตํด ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํฉ๋๋ค. ์ดํด๋ณด๋ ค๊ณ ํ๋ ๋ฌธ์๋ File System Programming Guide์ App Sandbox Design Guide์ธ๋ฐ์, ์๋๋ฐ์ค ๋ฌธ์ ๊ฐ์ ๊ฒฝ์ฐ์๋ MacOS๋ฅผ ๊ธฐ์ค์ผ๋ก ์์ฑ๋์ด ์์ด์ ๋๋ฌด ๊น๊ฒ๋ ๋ค๋ฃจ์ง ์๊ณ ์๋๋ฐ์ค์ ๊ฐ๋
์ด ๋ฌด์์ธ์ง ํ์ธํ๋ ์ฉ๋๋ก ๋ณด๋ ค๊ณ ํด์. ๋ฌธ์ ์์ฒด๊ฐ 2016๋
์ ๋ง์ง๋ง์ผ๋ก ์
๋ฐ์ดํธ ๋์ด์ ์ ๋ขฐ๋๋ ๋์ง ์๊ตฌ์. ๊ทธ๋ผ ํ๋์ฉ ์์ํด๋ณด๊ฒ ์ต๋๋ค! App Sandbox ๋ฌธ์์ ๋ฐ๋ฅด๋ฉด ์ฑ ์๋๋ฐ์ค๋ ์ปค๋ ๋ ๋ฒจ์์ ์ฑ์ ๋ฐ์ดํฐ์ ๋ํ ์ ๊ทผ์ ์ ํํ๋ ๊ธฐ์ ์ด์์. ์ฑ ์๋๋ฐ์ค์ ๋ชฉ์ ์ ์ฑ์ด ์์๋..
[iOS] ๋ฉ์ดํธ๋ฌ๋: ๋ฐ์ชฝ์ง๋ฆฌ ์ด๋ฏธ์ง ์บ์ ๊ฐ์ ํ๊ธฐ
[iOS] ๋ฉ์ดํธ๋ฌ๋: ๋ฐ์ชฝ์ง๋ฆฌ ์ด๋ฏธ์ง ์บ์ ๊ฐ์ ํ๊ธฐ
2022.01.18๋ฉ์ดํธ ๋ฌ๋ ์ฑ ๊ฐ๋ฐ ๊ณผ์ ์ ๊ณต์ ํ๋ ํฌ์คํธ์
๋๋ค! GitHub - boostcampwm-2021/iOS06-MateRunner: ํจ๊ป ๋ฌ๋ฆฌ๋ ์ฆ๊ฑฐ์, Mate Runner ๐๐ปโโ๏ธ๐๐ปโโ๏ธ ํจ๊ป ๋ฌ๋ฆฌ๋ ์ฆ๊ฑฐ์, Mate Runner ๐๐ปโโ๏ธ๐๐ปโโ๏ธ. Contribute to boostcampwm-2021/iOS06-MateRunner development by creating an account on GitHub. github.com ์ฌ๊ธฐ์ ์ ํฌ ํ๋ก์ ํธ๋ฅผ ๋ ์์ธํ ๋ณผ ์ ์์ด์! ๊ทธ๋ผ ์์ํ๊ฒ ์ต๋๋ค! ์ถฉ๊ฒฉ๊ณผ ๊ณตํฌ.. ๋ด๊ฐ ๋ง๋ ์ด๋ฏธ์ง ์บ์ฑ์ ๋ฐ์ชฝ์ง๋ฆฌ์๋ค! ๋ฟ๋ฏํ๊ฒ ํ๋ก์ ํธ๋ ๋ง์น๊ณ ํ๋ฌ์ด ๋์ด์์ผ ๊ตฌํํ๋ ์ด๋ฏธ์ง ์บ์ฑ์ ๋ฌธ์ ์ ์ ๋ฐ๊ฒฌํ๊ฒ ๋์์ต๋๋ค.. ์ค๋์ ์ด๋ค ๋ฌธ์ ์ ๋ค์ด ์๋์ง, ๊ทธ๋ฆฌ๊ณ ์ด..
[RxSwift] Disposables.create() ์ ํ์ง?
[RxSwift] Disposables.create() ์ ํ์ง?
2022.01.16Disposables.create ๋ถ์ํด๋ณด๊ธฐ Rx๋ฅผ ํ๋ฉด์ ๋ง์ด ๋ค์๋ ์๋ฌธ.. let numbers = Observable.create { observer in observer.onNext(1) observer.onNext(2) observer.onNext(2) return Disposables.create() } ์ฌ๊ธฐ์ ๋ง์ง๋ง์ Disposables.create()๋ฅผ ์ ํ์ง?? ๊ทธ๋ฅ ๋จ์ํ "๋ฐํํ์
์ด Disposable ์ด๋๊น"๋ ๋ง์ด ์๋๋ ๊ฒ ๊ฐ์์ ์ด๋ฒ์๋ ์์์ ํ๋ฆ๋๋ก ์ฝ๋๋ฅผ ํ ๋ฒ ๋ฏ์ด๋ณด๊ธฐ๋ก ํ์ต๋๋ค. Disposables ๋จผ์ Disposables.create๋๊น ํ์
๋ฉ์๋์ธ ๊ฒ ๊ฐ์์ Disposables๋ฅผ ์ฐพ์๋ณด๊ธฐ๋ก ํ์ด์. Rx ์ ์ฅ์์ ๋ค์ด๊ฐ๋ณด๋ฉด Disposables๋ผ๋ ๋๋ ..
[iOS] view.layer์ ์ ์ฒด๋ฅผ ์ฐพ์์
[iOS] view.layer์ ์ ์ฒด๋ฅผ ์ฐพ์์
2022.01.15UIView์ CALayer ์ง์ง ๋ฉด์ ์์ ์์ฃผ ๋ฐ๋ ์ง๋ฌธ์ธ UIVIew์ layer์ ์ฐจ์ด์ ๋ํด์ ๊ณต์๋ฌธ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ณต๋ถํด๋ณด๋ ค๊ณ ํด์. ์๋ํ๋ฉด ์ ๋ฐ ์ง๋ฌธ์ ๋ฐ์์ ๋ ๋จ ํ ๋ฒ๋ ๋ช
์พํ๊ฒ ๋ต๋ณ์ ํด๋ณธ ์ ์ด ์๋ ๊ฒ ๊ฐ์์์.. ๋ธ๋ก๊ทธ๋ค์ ๋๋ฌ๋ณด๋ฉด UIView์์ layer๊ฐ ์ํด์ ธ์๊ณ ์ด๋ฐ๊ฑด ์ ์ค๋ช
๋์ด์๋๋ฐ, ๊ทผ๋ณธ์ ์ผ๋ก ๋ ๊ฐ๊ฐ ์ด๋ป๊ฒ ๋ค๋ฅธ์ง ์๋ฟ๋ ๊ธ์ด ์์ด์ ๊ณต์๋ฌธ์๋ฅผ ํ๋ฉด์ ํ ๋ฒ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํฉ๋๋ค. ๊ทธ๋ผ ์์ํ๊ฒ ์ต๋๋ค! view.layer ๋จผ์ UIView๊ฐ ๊ฐ์ง๋ ํ๋กํผํฐ์ธ layer์ ๊ณต์๋ฌธ์๋ฅผ ๋ค์ฌ๋ค๋ณผ๊ฒ์. ์ค๋๋ ๋ด๋ฐฑํ ๊ณต์๋ฌธ์..ใ
ใ
์ผ๋จ ์๋ก์ด ํค์๋์ธ Core Animation, Rendering ์ ์ฒดํฌํด๋๊ณ ๋ํ
์ผํ ์ค๋ช
์ ํ๋ฒ ํ์ธํด๋ณด์ฃ . ๋ํ
์ผ ํ๋ค์..ใ
ใ
์ผ๋จ l..
[iOS] required init?(coder: NSCoder)์ ์ ์ฒด๋ฅผ ์ฐพ์์
[iOS] required init?(coder: NSCoder)์ ์ ์ฒด๋ฅผ ์ฐพ์์
2022.01.11NSCoder UIView๋ฅผ ์์ํด ์ปค์คํ
ํ๊ฒ ๋ทฐ๋ฅผ ๊ตฌ์ฑํ๊ฒ ๋๋ฉด ๋ ์ข
๋ฅ์ ์์ฑ์๋ฅผ ํ์ธํ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ์ผ๋ฐ์ ์ผ๋ก ์ฝ๋์์ ์ฌ์ฉํ๋ ์์ฑ์๋ frame์ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ๋ ์์ฑ์์์ฃ . ๊ทธ๋ผ NSCoder๋ฅผ ์ฌ์ฉํ๋ ์์ฑ์๋ ์ธ์ ์ฐ์ผ๊น์? ์ด ๋ฌผ์์ ๋ต์ ํ๊ธฐ ์ํด์๋ NSCoder๊ฐ ๋ฌด์์ธ์ง๋ถํฐ ์์์ผ๊ฒ ์ฃ ? NSCoder์ ๊ณต์ ๋ฌธ์๋ฅผ ์ฐพ์๊ฐ๋ด
์๋ค. ์ผ๋จ ๊ณต์๋ฌธ์์์๋ NSCoder๋ฅผ ์ถ์ํด๋์ค๋ผ๊ณ ์๊ฐํ๊ณ ์์ด์. ์ด๋ค ๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์์นด์ด๋น(archiving. ์์ถ์ด๋ผ๊ณ ๋ณผ ์ ์๊ฒ ์ฃ ?) ํ๊ฑฐ๋ ๋ถ๋ฐฐ(distribution)ํ ์ ์๋๋ก ํฉ๋๋ค. ์์ง ์ ๋ชจ๋ฅด๊ฒ ์ด์ ์ค๋ฒ๋ทฐ์์ ๋ ์์ธํ ๋ด์ฉ์ ์ฝ์ด๋ณผ๊ฒ์. NSCoder declares the interface used by concr..
[iOS] ๊ณต์๋ฌธ์๋ก ๊ณต๋ถํ๋ URLSession
[iOS] ๊ณต์๋ฌธ์๋ก ๊ณต๋ถํ๋ URLSession
2022.01.11Apple Developer Documentation developer.apple.com URLSession URLSession์ ๋คํธ์ํฌ ํต์ ๊ณผ ๊ด๋ จ๋ ์์
๋ค์ ๊ทธ๋ฃน์ ๊ด๋ฆฌํ๋ ๊ฐ์ฒด์
๋๋ค. Foundation ํ๋ ์์ํฌ์ ํฌํจ๋์ด ์๊ณ ํด๋์ค์
๋๋ค. Overview URLSession์ URL์ ํตํด ํน์ ๋๋ ์๋ ํฌ์ธํธ์ ๋ํด ๋ฐ์ดํฐ๋ฅผ ์
๋ก๋ํ๊ฑฐ๋ ๋ค์ด๋ก๋ ํ ์ ์๋๋ก API๋ฅผ ์ ๊ณตํ๋ ํด๋์ค์
๋๋ค. URLSession์ ํตํด์ ์ฑ์ด ์คํ๋์ง ์์๋, ํน์ Suspended ์ํ์ฌ๋(ํ ์ฒ์์์๋ค์..) ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๋ค์ด๋ก๋๋ฅผ ์งํํ ์ ์๊ฒ ๋์์ค๋๋ค. URLSessionDelegate๋ URLSessionTaskDelegate๋ฅผ ์ฌ์ฉํ๋ฉด ๊ถํ์ด๋ ๋ฆฌ๋ค์ด๋ ์
, ์์
์๋ฃ์ ๋ํ ์ด๋ฒคํธ๋ฅผ ๋ฐ์ ์..
[RxSwift] ์์์ ํ๋ฆ๋๋ก Observable ํํค์ณ๋ณด๊ธฐ
[RxSwift] ์์์ ํ๋ฆ๋๋ก Observable ํํค์ณ๋ณด๊ธฐ
2022.01.08์ฌํ๋์ RxSwift๋ฅผ ์ฝ๋๋ ๋ฒจ์์ ๋ถ์ํด๋ณด์ ์ ์ด ์๋์? ์ต๊ทผ ๋ฉด์ ์์ Rx์ ๋ํ ์ง๋ฌธ์ ๋ฐ์ ์ ์ด ์์ต๋๋ค. ๊ทธ๋ ๋ฌด์จ ๋ง์ ํ๋์ง ์ ๊ธฐ์ต์ด ์๋์ง๋ง.. Rx์ ๋ํด์ ์ดํด๋ฅผ ์ ๋๋ก ํ์ง ๋ชปํ๊ณ ์์์์ ๊นจ๋ซ๊ณ ์ฝ๋๋ ๋ฒจ๋ก ํ ๋ฒ ๋ฏ์ด๋ณด๋ ค๊ณ ํฉ๋๋ค! Observable ๋จผ์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ Observable์ ํ์ผ๋ถํฐ ์ฐพ์๊ฐ๋ณด์์ต๋๋ค. ์ผ๋จ ํด๋์ค์ด๊ณ ๋ด๋ถ์ subscribe์ asObservable ๋ฉ์๋๊ฐ ์๋ค์. ์ผ๋จ asObservable์ ์๊ธฐ ์์ ์ ๋ฐํํ๊ณ ์๊ณ , subscribe๋ rxAbstractMethod()๋ผ๋ ํจ์์ ํธ์ถ ์ธ์๋ ๋ค๋ฅธ ์ฝ๋๋ฅผ ๊ฐ์ง๊ณ ์์ง ์์ต๋๋ค. ๊ทธ๋์ rxAbstractMethod()๋ฅผ ์๊ธฐ์ํด ๋ฃจํธ ๋๋ ํ ๋ฆฌ์ ์๋ Rx.swift์ ์ฐพ์๊ฐ๋ณด์๋๋ฐ..
[Swift-WWDC21] ARC in Swift: Basics and beyond
[Swift-WWDC21] ARC in Swift: Basics and beyond
2022.01.06ARC in Swift: Basics and beyond ์ค๋์ WWDC21 ์ธ์
์ค์์ ARC์ ๋ํ ์ธ์
์ด ์๊ธธ๋ ๋ฒ์ญ์ ํด๋ณด๋ฉด์ ARC๋ฅผ ๋ค์ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํด์. ์ค์ญ์ด๋ ์์ญ์ด ์์ ์ ์์ผ๋ ์ด ํฌ์คํธ๊ฐ ์ ํ๊ณผ ์ค์ํํธํ์ ๊ณต์์ ์ธ ๋ฐํ๋ผ๊ณ ์๊ฐํ์ง ๋ง์๊ณ ๊ผญ ์๋ณธ ์์์ ๋ณด์๋ฉด์ ์์ด๊ฐ ์ด๋ ค์ฐ์ ๋ถ๋ถ์์ ์ฐธ๊ณ ๋ง ํด์ฃผ์๋ฉด ๋ ๊ฒ ๊ฐ์์! ๊ทธ๋ผ ์์ํ๊ฒ ์ต๋๋ค! ๊ทธ๋์ ๋ ์์ฆ์ ํค๋
ธํธ๋ฅผ ์์ฌ๋ ค์ฃผ๋๋ณด๋ค์ใ
ARC in Swift: Basics and beyond - WWDC21 - Videos - Apple Developer Learn about the basics of object lifetimes and ARC in Swift. Dive deep into what language features ..