오늘은 테이블뷰를 공부하던 중 imageView가 동그랗게 잘리지 않는 문제의 원인을 파악해 보기 위해View Drawing Cycle에 대해서 공부해보려고 한다. (제가 공부하기 위해 작성한 것이므로 여러 개념들이 나올 수 있으며 틀린 내용이 있다면 알려주세요!)🤔 문제원인self.profileImageView.layer.cornerRadius = self.profileImageView.frame.width / 2 분명 이미지 뷰의 넓이만큼 2로 나눠서 원의 형태로 이미지 뷰가 만들어지게 구현을 했지만 막상 빌드해 보면 아래 사진처럼 뭔가 마름모 모양의 형태로 구현이 되었다. 근데 스크롤을 하다보면 또 정상적으로 원의 형태가 나오게 되어 실행 시점에 문제가 있는거 같아 DispatchQueue.ma..
TableView에서 커스텀 셀을 다룰 때 awakeFromNib, init, prepareForReuse의 역할이 비슷해서 언제 써야 하는지 헷갈릴 때가 많았다. 따라서 오늘은 해당 개념들을 다시 정리하고 왜 이런 구조가 필요한지 분석해보고자 한다. (제가 공부하기 위해 작성한 것이므로 여러 개념들이 나올 수 있으며 틀린 내용이 있다면 알려주세요!) ✏️ 재사용 메커니즘TableView에서 1000개의 데이터를 보여주는 리스트가 있다고 가정했을 때 이 1000개의 셀이 모두 메모리에 생성되는 방식일까? 디자인에 따라 다르겠지만 아이폰 설정 창의 셀 크기를 참고해보면 화면에 보이는 셀은 10개 정도의 셀인데, 나머지 셀을 미리 만들어두는 건 메모리 낭비를 발생한다. 심지어 몇만개의 셀이 존재할 수..
라이브러리를 배포하기 위해 기존 앱 프로젝트의 코드를 Swift Package로 옮긴 뒤 빌드했을 때 컴파일 에러가 발생하였다. 컴파일러가 두 가지 제안을 줬는데 MainActor를 호출하던가 nonisolated 키워드를 사용하라고 제시했다. 하지만 AVFoundation과 같이 카메라나 미디어 처리는 주로 백그라운드에서 작업되는 것이라고 알고 있는데 MainActor를 호출하는 게 맞는 건가? 싶다가 nonisolated를 사용해보고자 하였다. 따라서 오늘은 swift Concurrency의 일부인 nonisolated 키워드에 대해서 알아보겠다!nonisolated와 nonisolated(unsafe)는 어떤 점이 다른지, 어떤 원리로 실행되는지 궁금해서 공부해보고자 한다.(제가 공부하기 위해 ..
✏️ Localization이란?앱을 다양한 언어와 지역 환경에 맞게 번역하고 조정하는 과정 Localization은 앱을 언어와 문화권에 맞게 텍스트나, 날짜, 숫자, 형식등을 현지화 하는 과정이다. 한국어를 다른 언어로 번역하는 것 뿐만 아니라 각 문화권에서 익숙한 표현 방식까지 반영한다. 예를 들어 우리나라는 년/월/일 표기라면 영어권은 월/일/년을 사용하므로 다국어지원을 설정했을때 날짜 표기 방식도 함께 반영된다.영어는 복수형이나 문장 구조에 따라 표현이 달라지는 것들도 있기 때문에, Localization을 통해 문장이 어색해지는 걸 방지하고 네이티브처럼 자연스러운 문장을 제공할 수 있도록 한다 이번에 Apple Developer Academy에서 하는 쇼케이스를 앞두고 애플 본사에서도 직원이..
팀프로젝트에서 SwiftLint를 사용하긴 하지만 막상 바쁜 개발과 마감기한 때문에 경고를 무시한 채 코드를 붙이는 경우가 꽤 흔하다. swiftLint가 팀 전체 코드 스타일을 맞춰주기 위해 어느 정도 가이드를 제공해주긴 하지만 결국 개발자가 직접 수정하지 않으면 경고는 계속해서 남아있다. 그래서 차라리 코드 포맷팅을 자동으로 보정해주는 툴을 사용하면 다른 기능 구현하는데 더 효과적이지 않을까?라는 고민을 하게 되었다.lint가 발생시키는 경고를 최소화하고 코드 스타일 맞추는 시간보다 다른 생산적인 작업에 집중 할 수 있도록 환경을 설정하고 싶었기 때문이다. 이럴 때 유용한 도구가 swiftFormat이다. 자동화된 포맷팅을 통해 빌드를 하기만 하면 팀 컨벤션을 자연스럽게 맞춰지고, 개발자가 직접 수정..
api를 통해 이미지를 매번 요청하면, 이미지 개수가 많아질수록 로딩이 지연되는 현상이 발생하고 불필요한 api 비용이 증가하게 된다. 이런 문제점을 해결하기 위해 이미지 캐싱을 적용하면 한 번 불러온 이미지를 재사용하기 때문에 네트워크 트래픽을 줄이고, 지연 로딩되는 문제를 해결할 수 있다. 캐싱로직을 직접 구현할 수도 있지만 더 간단하고 안정적인 방식으로 처리해 주는 라이브러리를 사용해 이미지 캐싱 로직을 구현해 보고자 한다. 대표적인 이미지캐싱 라이브러리인 kingfisher를 활용해 이미지 캐싱을 구현해보고 실제 메모리 사용과 성능에 어떤 영향을 주는지 직접 확인해 보자. ✏️ Kingfisher웹에서 이미지를 다운로드하고 캐시 하는 순수 swift 기반 라이브러리 GitHub - onevcat..
오늘은 개발 도중 Combine을 import 할 때 오류가 떴는데 이를 해결한 과정을 포스팅해보려고 한다. 📍문제 상황 SwiftUI를 사용한 프로젝트 개발을 하던 중 아래와 같은 오류가 떴다. 이유는 observableObject 프로토콜를 사용하고 있는데 Combine 모듈을 가져오지 못해서 objectWillChange 같은 요소를 찾지 못하는 상황이다. 분명 import SwiftUI도 하고 observableObject 프로토콜도 채택하고 있는데 말이다.. 위 오류를 해결하는 방법은 fix 누르면 자동으로 코드에 internal import Combine 가 추가되면서 오류가 해결된다. 여기서 생기는 의문점들. . Combine을 호출하지 않아도 SwiftUI가 Combine을 호출하..
이때까지 Alamofire만 써봤었는데 Moya라는 네트워킹 오픈 소스 라이브러리에 대한 궁금증이 생겼고, 마침 진행하고 있는 프로젝트에서 네트워킹을 해야 했기에 이번에 Moya를 프로젝트에 적용해 보고자 포스팅을 하게 되었다. 따라서 오늘은 네트워킹에 필요한 오픈소스 라이브러리인 Moya에 대해서 살펴보고 API를 활용해 직접 통신해 보는 것까지 해보려고 한다. ✏️ Moya란?Alamofire를 기반으로 한 네트워킹 추상화 계층을 만드는 오픈 소스 라이브러리 GitHub - Moya/Moya: Network abstraction layer written in Swift.Network abstraction layer written in Swift. Contribute to Moya/Moya deve..
- Total
- Today
- Yesterday
- SnapshotTest
- 코딩테스트
- unstructed task
- awakeFromNib
- swiftUI
- 클로저
- 프로그래머스
- rxswift
- ObservableObject
- UIKit
- ios
- CoreData
- XCTest
- closure
- 스위프트
- asyne-let
- prepareForReuse
- foundation models
- detached task
- internal Combine
- combine
- Swift Concurrency
- Xcode
- Swift Format
- Fastlane
- 백준
- group tasks
- Task
- UITest
- SWIFT
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |