접근제어자
·
🍎 iOS/Swift
open모듈 외부에서 접근 가능, 상속 및 오버라이딩 허용프레임워크 일부를 사용자에게 공개할때 사용 public모듈 외부에서 접근 가능, 상속과 오버라이딩 제한주로 라이브러리나 프레임워크의 일부 기능을 공개할 때 사용 internal모듈 내에서만 접근 가능, 앱의 대부분의 코드에서 기본적으로 사용 fileprivate같은 파일 내에서만 접근 가능, 파일 단위로 캡슐화를 적용하고자 할 때 유용 private해당 선언이 포함된 스코프(클래스, 구조체 등) 내에서만 접근 가능가장 강력한 제한으로 민감한 데이터나 내부 구현사항을 보호할 때 사용
Lazy와 weak을 함께 사용할 수 없는 이유
·
🍎 iOS/Swift
Lazy 속성의 특징 lazy 속성은 처음으로 접근할 때 초기화된다.객체가 생성된 이후에 값을 설정할 수 있어, 초기화 시점에서 특정 값이 준비되지 않은 경우에 유용하다.lazy 속성은 인스턴스가 메모리에 확실히 존재하는 동안 유지되며, 그 인스턴스가 필요할 때 메모리에서 초기화된다. Weak 속성의 특징weak 속성은 약한 참조를 가리킨다.약한 참조는 메모리 순환 참조를 피하기 위해 사용되며, 참조하는 객체가 메모리에서 해제되면 nil로 설정된다.약한 참조는 항상 Optional 타입이어야 하며, 가리키는 객체의 수명이 다하면 자동으로 해제된다. 호환되지 않는 이유lazy 속성은 초기화 시점을 보장해야 하는데, weak 속성은 언제든지 nil이 될 수 있는 특성을 갖고 있다.따라서 참조를 지속할 수 없..
UI를 메인스레드에서 구현해야하는 이유
·
🍎 iOS/Swift
UI는 왜 메인스레드에서 구현해야할까? UIKit의 메인 스레드 설계 원칙UIKit은 UI작업을 메인 스레드에서 수행하도록 설계되어있다.이것을 따르지 않으면 UI가 비동기적으로 백그라운드 스레드에서 업데이트 되며, 예상치 못한 충돌이나 렌더링에 실패할 수 있다. 스레드 안정성UIKit의 구성 요소는 대부분 Thread-safe하게 설계되지 않았다.여러 스레드에서 UI를 동시에 수정하려고하면 Race condition이나 불안정성이 발생하여 앱이 불규칙하게 작동할 수 있다.메인 스레드를 사용함으로써 이런 충돌을 예방할 수있다. Race Condition?2개 이상의 스레드나 프로세스가 공유자원에 동시에 접근하고 수정할 때 발생하는 문제예) 은행 거래 시스템에서 여러 사용자가 동시에 같은 계좌에서 돈을 인출..
matchedGeometryEffect(Hero animation)
·
🍎 iOS/SwiftUI
matchedGeometryEffect식별자와 네임스페이스를 제공하여 기하학이 동기화된 뷰 그룹을 정의. 이 modifier를 여러 뷰에 부착하면 SwiftUI가 뷰 간의 연결을 이해하고, 자동으로 Transition을 적용할 수 있게 된다. 1. 기본 구조설정@Namespace var animation SwiftUI에서 Hero 애니메이션을 구현하기 위해 먼저 네임스페이스를 정의한다.2. 뷰에 modifier 붙이기VStack { if shouldAnimate { Rectangle () .matchedGeometryEffect(id: "shape" , in: animation) } else { Rectangle () .matc..
matchedGeometryEffect
·
🍎 iOS/SwiftUI
matchedGeometryEffect식별자와 네임스페이스를 제공하여 기하학이 동기화된 뷰 그룹을 정의. 이 modifier를 여러 뷰에 부착하면 SwiftUI가 뷰 간의 연결을 이해하고, 자동으로 Transition을 적용할 수 있게 된다. 1. 기본 구조설정@Namespace var namespace SwiftUI에서 Hero 애니메이션을 구현하기 위해 먼저 네임스페이스를 정의한다.
Photos 프레임워크
·
🍎 iOS/Swift
PHAsset사진 라이브러리에 있는 이미지, 비디오와 같은 하나의 Asset을 의미 PHAssetCollectionPHAsset의 컬렉션 PHCachingImageManager요청한 크기에 맞게 이미지를 로드하여 캐싱까지 수행 PHFetchResult앨범 하나 PHPhotoLibraryChangeObserver사진 라이브러리에 대한 변경 사항을 감지하고 응답하기 위한 프로토콜 사용자가 사진을 추가, 삭제, 수정하거나 앨범에 변화를 주는 경우 메서드가 호출된다. photoLibraryDidChange(_:): 변경 감지 메서드 (꼭 구현해야함)PHPhotoLibrary.shared().register(_:): 옵저버 등록PHPhotoLibrary.shared().unregisterChangeObserver..
Photos 프레임워크 공식문서 번역
·
🍎 iOS/Swift
Photos 프레임워크사진 앱에서 관리하는 이미지 및 비디오 Asset을 다루는 프레임워크. 여기에는 iCloud 사진과 라이브 사진이 포함된다.PhotoKit을 사용하여 iOS, macOS, tvOS 및 visionOS에서 사진 앱이 관리하는 이미지 및 비디오 Asset에 접근합니다. 이 프레임워크를 사용하여 사용자의 사진을 편집하거나 표시하거나 앨범, 순간 및 공유 앨범과 같은 Asset 컬렉션을 관리할 수 있습니다. 이 프레임워크는 사용자의 장치와 iCloud에 있는 사진에 대한 접근을 제공합니다.앱에서 사용자의 사진에 접근하는 것 외에도, 앱 확장을 구축하고 앱의 기능을 iOS 또는 macOS의 사진 앱에 직접 통합할 수 있습니다. 사용자들이 사진과 비디오를 편집하거나 필터 및 효과를 적용할 수 ..
rebase시 conflict 해결하기
·
🐱Git
해결과정1. 먼저 합치기 원하는 브랜치를 rebase한다. 2. conflict 났는지 확인해보고 conflict가 있다면 vscode를 통해 conflict를 해결해주고 저장한다. 3. 수정 후 명령어를 통해 rebase과정을 끝마친다.4. git push origin head --force-with-lease 명령어를 통해 강제로 push를 진행한다.(--force-with-lease를 사용하면 '새로운 commit이 존재하는 경우에 강제로 push하는 것'을 막아준다.) 출처https://baeji77.github.io/dev/git/etc/git-rebase-and-confilct-resolve/ Git rebase와 친해지기 (git conflict를 해결하는 방..
Failed to load Info.plist from bundle
·
🍎 iOS/디버깅
문제원인 Xcode 캐시를 삭제해서 라이브러리 일부 파일이 누락됨 해결방법 File-Packages-Reset Package Cashes
특정시점의 커밋로그 가져오기
·
🐱Git
커밋로그 가져오는법 git log --author="JerryHan1" --since="2024-01-29" --until="2024-02-08" author 계정이름 이런식으로 가져오면 된다.
JerryiOS
'분류 전체보기' 카테고리의 글 목록