본문 바로가기

iOS

(63)
[iOS] ARC의 개념, Class vs Struct 및 Memory Leak발생 이유 탐구하기 | ARC 진짜 뿌수기 #2 안녕하세요. 이번 포스트에서는 ARC의 기본 개념 및 class와 struct의 차이, GC's Mark and Sweep은 왜 메모리 릭을 예방하는지 등의 ARC와의 차이점, memory leack의 발생을 Debug Memory Graph를 통해 탐구하고 해결하는 과정까지 소개하려고 합니다: ]Class vs StructARC를 탐구하기 위해서 Value type, Reference type의 개념을 알아야 합니다. 대표적으로 Struct, Class가 있습니다.Value Type의 Struct 특징!! Potato 구조체가 있습니다. 그리고 thread에 의해 execute()가 호출되어 해당 함수의 scope에 들어왔을 때의 상황입니다. Memory(memory layout link)의 stack..
[iOS] Dynamic view를 추가하는 상황에서 layoutIfNeeded() 활용 및 개념 완벽 뿌수기 +_+ | UIView life cycle 안녕하세요. 이번 포스트는 UIView와 AutoLayout이라면 빠질 수 없는 layoutIfNeeded()의 개념과 언제, 왜 사용해야 하는지 등을 정리하려고 합니다. 또한 커스텀 뷰 내부에 특정 subview를 동적으로 추가 후 화면에 render 해야할 때, subview's layoutIfNeeded와 super view's layoutIfNeeded 중 무엇을 호출해야 하는지에 대해 간단한 프로젝트를 통해 다양하게 탐구하며 알게된 개념을 소개하려고 합니다. 기본적으로 main run loop와 update cycle 관련해서 설명하는 해외 포스트(관련 링크)를 우선 꼭 보셔야 좋습니다. 지금부터 버튼을 클릭하면 동적으로 애니메이션과 함께 고양이 사진이 나온 후에 간단한 레이블이 아래로 보여지는..
[iOS] CALayer의 mask 프로퍼티와 gradient animation 파해치기!! 안녕하세요. 이번 포스트는 CALayer의 mask와 gradient 주는 방법과 CABasicAnimation으로 애니메이션 처리하는 방법에 대해서 소개하려고 합니다. 이런 느낌으로 말입니다!! 시작하기 전에 프로젝트 링크 참고해주시면 감사합니다.(깃허브 프로젝트 링크 바로 들여다보기) 위와같이 화면을 구성하기 위해 알아야 할 개념은 3가지 입니다. CALayer와 mask CABasicAnimation (keyPath: locations) UIGraphicsImageRenderer(size:) CALayer와 Mask CALayer는 UIView와 같이 아래 사진처럼 계층구조를 가질 수 있습니다. CALayer는 mask란 프로퍼티가 있습니다. 이는 alpha channel을 통해서 layer's c..
[iOS] collectionView(_:cellForRowAt:)에서 중복 선언 및 호출되는 로직 간소화 | POP와 OOP, 프로토콜 composition 안녕하세요. 지난 포스트에서는 최근 진행중인 프로젝트에서 재사용 가능한 cell의 UI에서 특정 영역에만 UI가 서로 다른 경우, 하나의 cell에 데이터가 들어올 때마다 데이터에 맞게 레이아웃을 잡는 경우 vs 서로 다른 UI별로 cell을 만드는 경우 중 뭐가 성능상 좋은지 실험(관련 포스트 링크) 후 리빌딩 했었습니다. 이번 포스트에선 지난 포스트에서의 리빌딩 과정 중 collectionView(_:cellForRowAt:) 델리게이트에서 중복 코드가 너무 많이 보여서 프로토콜 지향적 + 객체지향 개념을 활용해 리빌딩한 경험을(리빌딩한 코드 관련 커밋 링크) 소개하려고 합니닷!! 프로젝트 구조 간단 소개 진행중인 프로젝트의 피드 화면입니다. 자세히 보면, 회색 영역은 ui가 같지만 이미지 영역은 서..
[iOS] 컬랙션 뷰cell에서 특정 영역만 다른 ui를 갖는 경우 단일 cell or 여러 개의 cell 중 뭐가 좋을까..? | UI 성능 실험 static vs dynmaic 안녕하세요. 오늘은 한 섹션에서 사용되는 reusable cell이 특정 영역만 다른 ui를 갖을 때, 하나의 cell안에 분기처리를 통해 레이아웃을 구성하는 것 vs 여러개의 cell을 등록하고 재사용 큐에서 꺼내오는 것 중 뭐가 성능이 더 좋을지 분석한 것을 정리하려고 합니다. 현재 개발중인 프로젝트의 피드 화면입니다!! 피드에서는 컬랙션 뷰를 사용하고 있습니다. 위 사진에서 맨 왼쪽은 cell내부에서 사용되는 서브뷰들의 영역입니다. 포스트가 보여지는 하나의 섹션에서, 사용자가 올린 사진에 따라서 총 5개 정도의 사진 배치가 있습니다. 이렇게 회색 영역은 모두 같지만, 포스트 thumbnail 이미지에 개수에 따라 배치가 달라져야 합니다. 이때 궁금증은 하나의 cell타입만 등록 후 collectio..
[iOS] Dynamic TableViewCell in Runtime(with animation) | 테이블뷰 Deep dive #1 사전 지식 안녕하세요. 테이블 뷰를 기반으로 Runtime 때 사용자의 터치에 따라 dynamic한 tableView cell을 만들어 볼 것입니다. 이번 포스트에선 dynamic tableViewCell을 만들기 전에 알아두어야 할 사전 개념을 소개하려고 합니다 +_+ 호호.. 재밌습니다. 이 화면을 구현할 때 중요한 키워드입니다. tableView contentView UIView's intrinsicContentSize view's priority + hugging | compression resistance performBatchUpdates(_:completion:) vs beginUpdates() | endUpdates() NSLayoutConstraint's priority in UILayoutPrio..
[iOS] 알림 아이콘이 보여지는 언더바 세그먼트 | 세그먼트 컨트롤 커스텀 #2 안녕하세요. 세그먼트 개념 탐구 포스트#1에서는 세그먼트를 사용하는 방법을 소개했습니다. 이번 포스트는 세그먼트를 클릭할 때 전환되는 언더바와 UISegmentedControl의 items에 문자열들을 보여주는 label을 segmented control안에서 인스턴스로 찾아 각각의 레이블 안에 둥근 알림 뷰를 추가하도록 segmented control을 커스텀하려고 합니다. 깃허브 프로젝트 코드 링크입니다. 세그먼트를 누르면 빨간 아이콘이 사라지고, 특정한 경우에 특정 세그먼트에 빨간 아이콘을 생성하도록 호출하는 함수를 구현했습니다. final class RedIconBasedUnderbarSegmentedControl: UISegmentedControl { private lazy var underb..
[iOS] UISegmentedControl 탐구하기 | 세그먼트 컨트롤 커스텀 #1 안녕하세요. 이번 포스트는 세그먼트 컨트롤의 사용 방법과 커스텀을 소개하려고 합니다. 세그먼트 컨트롤은 items 개수에 따라 width가 같은 segment들이 있습니다. class ViewController { let segment = UISegmentedControl(items: ["Cherry Page", "Orange Page"]) override func viewDidLoad() { super.viewDidLoad() view.addSubivew(segemnt) NSLayoutConstraint.active([ segment.leadingAnchor.constraint(equalTo: view.leadingAnchor), segment.topAnchor.constraint(equalTo: vi..