실수 4

NSCache 파일 key - value 설정 실수

토이프로젝트 진행 중 URLSession에서 가져온 이미지 데이터를 Filemanager, NSCache를 사용하여 기기 메모리 캐싱, 디스크 캐싱을 시도했다. 이미지를 View에 할당하는 과정은 다음과 같이 작동한다. NSCache로 메모리 캐시에서 이미지 파일을 검색 후 있으면 View에 이미지 할당하고 없으면 FileManader를 검사한다. FileManager로 디스크 캐시에서 이미지 파일을 검색 후 있으면 View에 이미지 할당하고 NSCache로 메모리 캐시에 이미지 파일을 저장한다. URLSession으로 파일을 다운한다. URLSession으로 이미지 파일을 서버로부터 다운 후 View에 이미지 할당하고 FileManager로 디스크 캐시에 이미지 파일을 저장하고 NSCache로 메모리 ..

실수 2023.06.19

View 구조체 안에서 NSCache 사용

NSCache를 사용하여 데이터를 기기 캐시 메모리 안에 임시 저장하여 자원을 효율적으로 관리할 수 있다. 보통 NSCache를 사용할 때, Singleton으로 CacheManager 클래스를 만들어 하나의 객체에서 NSCache의 과업을 수행한다. 나는 개인 프로젝트로 OpenAPI로부터 이미지 데이터를 받아와서 메모리 / 디스크 캐시에 저장하고 다시 파일을 로드하는 과정을 시도했다. 나는 이미지 캐시에 대한 Singleton 객체를 만들게 되면 여러 스레드에서 한 개의 객체에 NSCache 작업을 수행하게 되어 크래시가 발생할 것을 우려하여 각 이미지 View Struct 안에 MVVM형식(데이터 바인딩)을 취하는 방식으로 이미지 캐시 구현을 시도했다. 결과는 데이터가 저장되고, 호출되는 과정에서 ..

실수 2023.04.20

의도치않은 ObservedObject 객체 초기화 실수

SwiftUI에서 관찰중인 객체의 변경에 반응해서 화면을 업데이트해서 보여줄 때 쓰는 것이 바로 StateObject, ObservedObject, EnvironmentObject 이 세가지 이다. 이런 생각을 해본 적이 있다. 'StateObject, ObservedObject, EnvironmentObject 이 모두를 동시에 사용할 수 있을까?' 우리 팀에서 만든 토이프로젝트에서 위 세가지 모두를 동시에 사용했는데,이로서 나타난 나의 실수를 기술하고자 한다. 우리가 만든 토이프로젝트의 간단 예를 설명해주자면,1. 통아저씨 게임2. 돌림판 게임3. 계산기이 세가지가 모두 포함된 어플이다.여기서 위 세가지 기능의 모든 결과를 @EnvironmentObject resultData 에 넣어줘야한다. 하지만..

실수 2022.11.07

Button 컴포넌트 사용에 대한 실수(완성도 높이기)

SwiftUI를 사용하면서 기능 구현, 보여지는 시각적 디자인에만 신경쓰다보면 놓치는 부분이 한두가지 있기 마련이다. 하지만 많은 예제를 만들면서 나는 그동안 무심코 지나쳤던 내용이 있었고 그에 관한 글을 작성해보려고 한다. 내가 무심코 지나쳤던 부분은,, 바로 Button 컴포넌트이다. 다음 계산기 프로그램을 확인해보면, 빨간 테두리가 9번에 대한 버튼이다. '버튼'은 버튼으로 보이는 것을 눌렀을 때 작동해야하지만, 문제는 텍스트 '9'를 눌렀을 때만 버튼이 동작한다. 즉, 텍스트 '9' 외 다른 버튼 배경을 누르면 버튼의 동작을 수행하지않는다. 이에 대한 코드는 다음과 같다. Button{ if(flag == true){ totalNumber = "0" flag = false } if totalNum..

실수 2022.10.31