본문 바로가기

iOS18

[Swift] 순환참조와 strong, weak, unowned 순환참조 문제변수나 상수가 참조타입의 인스턴스를 참조할 경우 따로 키워드를 지정하지 않으면 strong 즉 강한 참조를 하게 되는데, 참조타입을 증가시키는 것도 모두 이 강한참조일 때만 발생한다.이때, 두 클래스가 서로를 참조하는 프로퍼티를 모두 갖는다면, 힙에서 두 인스턴스 모두 영원히 해제되지 않는 상황이 발생한다.A의 프로퍼티가 B 강한참조, B의 프로퍼티가 A 강한참조→ B RC: 2 (생성될때, A에의해 참조될때)→ A RC: 2 (생성될때, B에의해 참조될때)A = nil, B = nil→ B RC: 1 (nil로 인한 -1, A가 메모리 상에 있으므로 A에 의해 증가한 참조횟수 1이 그대로 남아있음)→ A RC: 1 (nil로 인한 -1, 그치만 B에의해 증가된 참조횟수 1이 남아있어서 메모.. 2025. 3. 14.
[Swift] 메모리 관리 기법 (ARC) ARC (Automatic Reference Counting)힙에 할당되는 참조 타입을 해당 값이 더 이상 필요하지 않을 때, 자동으로 메모리에서 해제해주는 기법이를 통해 개발자가 직접 참조타입에 메모리 할당, 해제를 해주지 않아도 자동으로 메모리 할당과 해제가 이루어져 메모리 누수를 막을 수 있다. RC(Reference Count)를 이용한 메모리 관리 기법으로, 힙에 할당되는 인스턴스마다 RC를 갖고 있음.해당 인스턴스가 참조되고 있는 횟수를 나타내며, 0이 되면 자동으로 해제 된다.참조 횟수(RC)를 증가시키는 경우인스턴스를 새로 생성할 때 (ex. 클래스 인스턴스 생성 → 변수에 대입)기존 인스턴스를 다른 변수에 새로 대입할 때참조 횟수(RC)를 감소시키는 경우인스턴스를 가리키던(참조하던) 변수.. 2025. 3. 14.
[iOS] Combine 기초 (추가 중) Combine비동기적으로 발생하는 이벤트에 따라 변하는 값을 처리하기 위해 Apple에서 제공하는 Swift API이다.Combine은 변하는 값을 내보내는 Publisher (프로토콜)와 Publisher가 내보낸 값을 받는 Subscriber 을 선언한다.Publisher : Publisher 프로토콜을 채택한 타입은 시간에 따라 변하는 일련의 값들을 전달하는 타입이다. publisher는 operators를 가질 수 있는데, operator는 상위(혹은 이전)스트림의 publisher로 부터 전달받은 값들에 대해 행동(값을 변경 하는 등)을 수행하고, 그 결과를 다시 내보내는 역할을 한다.Subscriber : Subcriber 프로토콜을 채택한 타입은 publisher들의 체인 끝에서 내보내진 각.. 2025. 2. 13.
[SwiftUI] Environment value : dismiss (NavigationStack에서 뷰 닫기) SwiftUI에서 NavigationStack를 사용하면서 화면전환을 하는데, back button을 커스터마이징 하면서,현재 나타나고 있는 뷰를 닫고 전으로 돌아가야 하는, 즉 네비게이션 스택에서 현재 뷰를 삭제해야하는 액션이 필요했다.이때 주로 해당 뷰에 Environment 값으로 dismiss를 선언해서 사용하는데, 생소해서 공식 문서를 참고하면서 내용을 번역해서 정리해두었다. 아래 공식 문서 참고https://developer.apple.com/documentation/swiftui/environmentvalues/dismiss dismiss | Apple Developer DocumentationAn action that dismisses the current presentation.devel.. 2024. 12. 26.
[또러블슈팅] CloudKit + CoreData 을 사용하는 App에서 iCloud 동기화가 안되는 문제 CloudKit과 CoreData 사용시 iCloud 데이터 동기화가 자동으로 되지 않는 경우 내 경우- CoreData를 사용해서 local data persistence storage를 사용하고 있었음- CloudKit을 사용할 수 있도록 Capabilities에도 iCloud, container를 체크해둠- CoreData Model 파일의 configuration에도 used with CloudKit 체크해둠- AppDelegate 파일에도 "NSPersistentCloudKitContainer"로 되어있었음. 처음 앱을 출시했을 때도 이랬던걸로 보아 프로젝트를 생성할 때 use CloudKit에 체크를 했던 것 같다.- 이 외에도 Background - remote notification 체크등.. 2024. 12. 12.
[또러블슈팅] double-quoted include "헤더파일명" in framework header, expected angle-bracketed instead ERROR 또(트)러블슈팅 에러가 뜨게 된 상황1. 빌드 하고 실행하려고 했는데, 'GoogleUtilities/GULAppEnvironmentUtil.h' 파일에서 함수명() 이렇게 되어 있는 부분에 void를 추가하라는 문구가 뜸2. 추가하려고 Fix 눌렀는데, 이 파일은 Lock 되어 있는 파일이다. 풀거냐 이래서 망설였지만 풀었음..풀고 ()안에 void를 추가함3. 해당 워닝은 사라졌지만 갑자기 문제의 "double-quoted include "헤더파일 명" in framework header, expected angle-bracketed instead" 오류가 엄청나게 뜸 ""로 헤더 Import하고 있는 곳마다 뜬듯3. angle-bracketed 로 바꿔줘도 계속 뜸 (바꿔주면 그 파일 없다고 떴나.. 2024. 12. 10.
[Swift] 데이터타입/컬렉션타입/구조체,클래스,열거형/옵셔널 #1 1. Enum과 Struct의 차이점 Enum 타입은 열거형 타입으로 연관된 값들의 집합이다. case 하나하나가 하나의 값을 나타내는 타입. Struct는 프로퍼티와 메서드로 구성된 타입. enum, struct 모두 class와 다르게 값 타입이며, 상속이 불가능하지만 프로토콜 채택은 가능함. 2. Int / Int32 / Int64 | UInt / UInt32 / UInt64 각각의 차이는 무엇인지? 모두 정수를 나타내는 데이터 타입. 뒤에 붙는 32,64는 타입이 표현할 수 있는 비트의 크기. Int는 음수와 0, 양수를 표현할 수 있고, UInt는 양수만 표현할 수 있음. 크기가 표시되지 않은 Int, UInt는 해당 프로그램이 컴파일되는 컴퓨터의 시스템 아키텍처를 따른다. 즉, 자신이 사용하는.. 2022. 2. 19.
[iOS/Swift] DateFormatter 클래스 사용하기 인척하는 github gist 사용 연습 2021. 4. 10.
[iOS] CocoaPods 사용법 guides.cocoapods.org/using/using-cocoapods.html CocoaPods Guides CocoaPods is fully open-sourced, so it depends on community contributions to get better. If you're looking to start working on CocoaPods, this is the place to start. guides.cocoapods.org cocoapods은 공홈이 잘 설명해뒀다. 하지만 매번 공홈에 가서 찾아보긴 귀찮으니까 정리해두는 아주 간단한 내용 우선 초기 설치는 다 했다 치고 새로운 라이브러리 추가할때 1. 프로젝트 안에 Podfile을 연다.(텍스트 편집기로 열어도 되고 terminal.. 2021. 4. 7.
728x90