일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- 입력 개수 제한
- Xcodebuild
- 픽셀
- 스큐어모피즘
- 패캠챌린지
- viewDidLoad
- 디자인 트렌드
- 포인트
- git
- 패스트캠퍼스후기
- 플랫디자인
- ios
- 뉴북
- 직장인자기계발
- 뉴모피즘
- iOS앱개발올인원패키지Online.
- git workflow
- 8 그리드 시스템
- 직장인인강
- 코드리팩토링
- 패스트캠퍼스
- commit
- commit message
- SWIFT
- 아이폰
- coordinator pattern
- viewDidAppear
- commit messages
- Git Tutorial
- 머티리얼 디자인
- Today
- Total
목록iOS/Swift (32)
왕논의 연구실
🌀 RunLoop와 예약된 작업 처리iOS 앱을 개발하다 보면 setNeedsLayout()이나 setNeedsDisplay() 같은 메서드를 쓰는데,이걸 호출해도 화면이 즉시 바뀌지 않는 경험을 한 번쯤 있습니다..이 글에서는 왜 즉시 반영되지 않고 '예약'만 되는지, 그리고 그걸 언제 처리하는지즉, RunLoop가 어떤 역할을 하는지를 정리해보겠습니다.📌 예약만 하고 바로 안 되는 이유?UIKit은 성능을 위해 UI 변경 작업을 즉시 처리하지 않고,한 번에 모아서 처리하는 구조를 사용합니다.이때 사용하는 시스템이 바로 RunLoop입니다.🔁 RunLoop란?RunLoop는 iOS 앱이 실행되는 동안 돌아가는 이벤트 처리 루프입니다.앱은 항상 RunLoop를 돌며 "터치, 타이머, 네트워크, UI..
🔍 두 방식의 차이 요약구분ViewModel을 ViewController에서 주입ViewModel을 View에서 직접 참조구조ViewController가 View와 ViewModel을 연결View가 ViewModel을 직접 소유장점역할 분리 명확, 테스트 용이코드가 간결하고 SwiftUI에 가까움단점코드가 장황해질 수 있음View가 똑똑해지고 재사용성 저하흔한 사례UIKit, 전통적 MVVMSwiftUI, 간단한 화면 구성아키텍처적 해석MVVM with Coordinator / Clean ArchitecturePassive MVVM or MVVM-ish🎯 각 방식의 코드 구조와 의미1. ViewModel을 ViewController에서 관리 (전통적 MVVM)class MyViewController:..
1. 왜 ‘소유권 (ownership)’이 필요할까?Swift 의 값 - 복사(copy) 기반 모델은 편리하지만, 고유-자원(파일 디스크립터, 락, GPU 버퍼 등)은 “한 번에 하나만” 소유되어야 안전합니다. 불필요한 ARC retain/release · 메모리 복사는 성능을 떨어뜨립니다.이를 해결하기 위해 Swift 5.9~5.10에서 “값의 소유권 을 코드에 표현” 하는 세 가지 키워드가 도입되었습니다.키워드의미대표 위치~Copyable (비복사/noncopyable)“이 값은 복사 불가, 이동-전용(move-only)”타입 선언borrowing“잠깐 빌려쓰기”∙읽기 전용, 끝나면 호출자 소유권 유지파라미터·메서드·클로저consuming“소유권을 넘겨받아 소비”∙끝나면 호출자에서 더 못 씀파라미..
UIView 기준함수호출 시점주로 하는 일비고init(frame:)코드로 View 생성 시View 초기 설정초기화init?(coder:)Storyboard, Xib 로드 시View 초기 설정초기화layoutSubviews()Frame 변경 시서브뷰 레이아웃 재배치AutoLayout 안 쓰거나 커스텀 레이아웃 할 때 주로 사용draw(_:)View 다시 그릴 때직접 그래픽 그리기CoreGraphics, 무거움 주의updateConstraints()constraints 업데이트 필요 시제약조건 동적 업데이트setNeedsUpdateConstraints() 호출 후 실행됨UIViewController 기준함수호출 시점주로 하는 일비고loadView()메모리에 View 로드 시View 직접 생성 (특수 케이스)..
CoreBluetoothBLE 통신을 iOS에서 다루는 방법✨ CoreBluetooth란 무엇인가?CoreBluetooth는 iOS, macOS, watchOS에서Bluetooth Low Energy (BLE) 통신을 지원하기 위한 애플 프레임워크입니다. BLE는 저전력 통신 기술로, 소형 디바이스(스마트워치, 피트니스 밴드, IoT 센서 등)와 데이터를 교환할 때 사용합니다.🛠 CoreBluetooth를 다루는 기본 구조CoreBluetooth는 2가지 큰 역할로 나뉩니다.역할클래스설명CentralCBCentralManager, CBPeripheral주변 BLE 기기 스캔 및 연결 (스마트폰처럼 동작)PeripheralCBPeripheralManager, CBMutableCharacteristic,..
XCTest란?Swift로 앱 개발할 때 "내 코드가 잘 동작하는지 자동으로 검사해주는 도구"입니다.쉽게 말하면:테스트 전용 코드 작성 → Xcode가 실행 → 통과 or 실패 알려줌사용하는 이유?버그 빨리 잡기리팩토링 후 안 깨졌는지 확인자동 검사 가능 (수작업 X)TDD (Test Driven Development) 할 때 필수어떻게 쓰나?1. import XCTestimport XCTest2. 테스트 전용 클래스 만들기class UserManagerTests: XCTestCase { // 테스트 코드 여기에!}이름 끝에 Tests 붙이는게 약속!XCTest 주요 기능 (진짜 자주 쓰는 것만)기능설명예시XCTAssertEqual값이 같은지 검사XCTAssertEqual(a, b)XCTAssert..