swift์์ ์ฐธ์กฐ ํ์๋ฅผ ์ธ๋ ARC๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ๋ค. ์ฐธ์กฐ ํ์๋ฅผ ๊ณ์ฐํ๋ ๋ฒ์ ์ธ์คํด์ค๋ฅผ ์์ฑ or ๊ธฐ์กด ์ธ์คํด์ค๋ฅผ ๋ค๋ฅธ ๋ณ์์ ๋์ ํ ๋ +1 ์ธ์คํด์ค๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ณ์๊ฐ ํด์ ๋ ๋ or nil์ด ๋ ๋ -1 ๊ทธ๋ฆฌ๊ณ 0์ด ๋์์ ๋, ๋ฉ๋ชจ๋ฆฌ์์ ์๋์ผ๋ก ํด์ ๊ฐ ๋๋ค. ์ด๋ก ์ ์ผ๋ก ์ด๋ ๊ณ ,, ์ค์ ๋ก CFGetRetainCount ํจ์๋ฅผ ์ฌ์ฉํ๋ฉฐ ์ฐธ์กฐ ํ์๋ฅผ ์ธ์ด๋ณด์. RC +1์ด ๋๋ ๊ฒฝ์ฐ class EmptyClass { } let myClass = EmptyClass() // RC +1 let myClass2 = myClass // RC +1 let myClass3 = myClass // RC +1 print(CFGetRetainCount(myClass)) // 4 print(CFGetRetai..
ํ๋ก์ ํธ ์ธํ ํ ๋๋ง๋ค ์ฐพ์๋ด์ ์ด๋ฒ ๊ธฐํ์ ์ ๋ฆฌํ๋ ค ํ๋ค. 1. Main ์คํ ๋ฆฌ๋ณด๋ ์ญ์ 2. Project target - Build Settings - main๊ฒ์ - UiKit Main Storybard File base Name ์ญ์ 3. info.plist - storybard Name ์ญ์ 4. SceneDelegate ์์ func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { guard let windowScene = (scene as? UIWindowScene) else { return } window = UIWindow(..
SwiftUI๋ก ํ๋ก์ ํธ ์์ ์ ํ๋ฉด์ TabView๋ฅผ ํตํด ํญ๋ฐ๋ฅผ ๊ตฌํํ๋ค. TabView๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝ๋๊ฐ ๋งค์ฐ ๊ฐ๋จํ์ง๋ง.. ์ปค์คํ ์์ ์ ์ฐํ์ง ๋ชปํ๋ค. ํญ๋ฐ ๋ฐฐ๊ฒฝ์ ๋ณ๊ฒฝ (ํฐ์์ผ๋ก), ์คํฌ๋กค ํ ๋ ํฌ๋ช ๋ ์์ ๊ธฐ ํญ๋ฐ ๋์ด ๋ณ๊ฒฝ ํญ๋ฐ ๊ธ์จ์ฒด ๋ณ๊ฒฝ ์ ํด์ผํ๊ธฐ ๋๋ฌธ์ CustomTabView๋ฅผ ๋ง๋ค์๋ค. CustomTabView.swift import SwiftUI enum Tab { case calendar case feed } struct CustomTabView: View { @Binding var selectedTab: Tab var body: some View { HStack(alignment: .center) { Button { selectedTab = .calendar } label: ..
NotificationCenter๋? observer(๊ด์ฐฐ์)์๊ฒ ์ ๋ณด๋ฅผ ์ ๋ฌํด์ฃผ๋ ์๋ฆผ ๋ฐ์ก ๋ฉ์ปค๋์ฆ ์ธ์ Notification ์ผํฐ๋ฅผ ์ฌ์ฉ? ์ฑ ๋ด์์ ๊ณต์์ ์ธ ์ฐ๊ฒฐ์ด ์๋ ๋ ๊ฐ ์ด์์ ์ปดํฌ๋ํธ๋ค์ด ์ํธ์์ฉ์ด ํ์ํ ๋ ์ํธ์์ฉ์ด ๋ฐ๋ณต์ ์ผ๋ก ๊ทธ๋ฆฌ๊ณ ์ง์์ ์ผ๋ก ์ด๋ฃจ์ด์ ธ์ผ ํ ๋ ์ผ๋๋ค ๋๋ ๋ค๋๋ค ํต์ ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ 1. Observer(๊ด์ฐฐ์) ๋ฑ๋ก NotificationCenter.default.addObserver( self, selector: #selector(scrollToBottom), // ์๋ฆผ์ ๋ฐ์ ๋ ์ํํ action name: NSNotification.Name("TestNotification"), object: nil ) ์๋ฆผ์ ๋ฐ๊ณ ์ถ์ ๋ถ๋ถ์ observer๋ฅผ ๋ฑ๋กํ๋ค...