210526 Wed

Sunny·2021년 6월 2일
0

Today I Learned

목록 보기
63/88

1. 첫 번째 학습 내용: 캐시와 캐싱

캐시란?

캐시는 컴퓨터의 성능을 향상시키기 위해 사용되는 메모리를 말합니다.

주기억장치와 CPU사이에 위치하고, 자주 사용하는 데이터들을 기억합니다.

캐싱이란?

캐싱은 이 캐시 영역으로 데이터를 가져와서 접근하는 방식을 말합니다.

예를 들면 속도가 느린 디스크의 데이터를 속도가 빠른 메모리로 가져와서 메모리상에서 읽고 쓰는 작업을 수행합니다.

이것이 캐싱입니다.

다른 의미로는 메모리 상에 있는 데이터를 연산하는데, 이 연산을 더 빠른 CPU 메모리 영역으로 가져와서 처리를 수행하는 것도 캐싱한다고 표현합니다.

캐슁이란 저장한다는 뜻이다. 컴퓨팅에서 캐슁이란 오랜시간이 걸리는 작업의 결과를 저장해서 시간과 비용의 필요를 회피하는 기법을 의미한다. 캐슁은 고성능 에플리케이션을 만드는데 가장 중요한 요소 중의 하나다.

지역성 - 시간, 공간, 순차적 지역성

캐시는 지역성이라는 특성을 이용하여 성능 개선을 합니다.

지역성은 시간, 공간, 순차적 지역성으로 나눌수 있습니다.

  • 시간 지역성은 for, while 등의 반복문에서 사용하는 조건 변수처럼 한번 참조된 데이터는 또 참조될 가능성이 높다는 것을 말합니다.
  • 공간 지역성은 배역 A[0], A[1]과 같은 배열에 연속적으로 접근할 때, 참조된 데이터는 근처에 있는 데이터가 또 사용될 가능성이 높다는 것입니다.
  • 순차적 지역성은 분기가 발생하는 비순차적인 실행이 아닌 이상, 명령어들이 메모리에 저장된 순서대로 실행된다는 특성을 이용하여 순차적일수록 데이터가 사용될 가능성이 높다는 것입니다.

[일반] 캐시, 캐싱이란

다음은 캐슁의 대표적인 사례다.

  • 시험을 볼 때 원리를 이해하고 문제를 푸는 것이 아니라, 덤프를 외워서 답안을 작성한다.
  • 웹브라우저는 한번 다운로드 한 이미지 파일은 임시저장 디렉토리에 저장했다가 다음 요청이 있을 때 다운로드 하지 않고 다운받아 둔 이미지를 사용한다.
  • 웹페이지를 탐색할 때 도메인을 이용하면 내부적으로는 그 도메인에 해당하는 IP를 알아내기 위해서 네임서버에 접속을 한다. 이 때 네임서버가 알려준 IP 주소를 운영체제나 브라우저는 그 결과를 기억하고 있다가 동일 도메인에 대한 접근 시에 저장된 IP 주소를 사용한다.
  • CPU는 연산의 결과를 빠르게 저장하기 위해서 메인 메모리 보다 빠른 캐쉬 메모리를 사용해서 빠르게 작업을 처리한다.

Caching - 생활코딩

링크 공유해준 Thanks to Alan 👏

Generic Class NSCache

A mutable collection you use to temporarily store transient key-value pairs that are subject to eviction when resources are low.

class NSCache<KeyType, ObjectType> : NSObject where KeyType : AnyObject, ObjectType : AnyObject

You typically use NSCache objects to temporarily store objects with transient data that are expensive to create. Reusing these objects can provide performance benefits, because their values do not have to be recalculated. However, the objects are not critical to the application and can be discarded if memory is tight. If discarded, their values will have to be recomputed again when needed.

Caching in Swift | Swift by Sundell

2. 두 번째 학습 내용: Segmented Controls (H.I.G)

A segmented control is a linear set of two or more segments, each of which functions as a mutually exclusive button. Within the control, all segments are equal in width. Like buttons, segments can contain text or images. Segmented controls are often used to display different views. In Maps, for example, a segmented control lets you switch between Map, Transit, and Satellite views.

  • Limit the number of segments to improve usability. Wider segments are easier to tap. On iPhone, a segmented control should have five or fewer segments.
  • Try to keep segment content size consistent. Because all segments have equal width, it doesn’t look great if content fills some segments but not others. 어떤 셀은 꽉 채워져 있고 다른 셀은 아니고 그러지 말기
  • Avoid mixing text and images in a segmented control. Although individual segments can contain text or images, mixing the two in a single control can lead to a disconnected and confusing interface. 한 세그먼트 안에 텍스트랑 이미지 둘다 짬뽕해서 넣지 말기
  • Position content appropriately in a custom segmented control. If you change the background appearance of a segmented control, make sure content still looks good and doesn’t appear misaligned.

Segmented Controls - Controls - iOS - Human Interface Guidelines - Apple Developer

3. 세 번째 학습 내용: Container View Controller (컨테이너뷰 컨트롤러)

Creating a Custom Container View Controller

Create a composite interface by combining content from one or more view controllers with other custom views.

Container view controllers promote better encapsulation by separating out your content from how you display that content onscreen. Unlike a content view controller that displays your app’s data, a container view controller displays other view controllers, arranging them onscreen and handling navigation between them.

A container view controller is still a view controller, so you display it in a window or present it like any other view controller. A container view controller also manages a composite interface, incorporating the views from one or more child view controllers into its own view hierarchy. Each child continues to manage its own view hierarchy, but the container manages the position and size of that child’s root view.

Many container view controllers facilitate navigation between different parts of your app’s content. Examples include UINavigationController, UITabBarController, and UIPageViewController, which help users navigate between different view controllers. You can also use container view controllers to organize the content you have more efficiently. For example, UISplitViewController displays two view controllers side-by-side on iPad. The only difference between navigation and organization is that navigation requires custom API to change the child view controllers; otherwise, the implementations are identical.

Implementing a Container View Controller

Managing View Controllers With Container View Controllers

문제점/고민한점 → 해결방안 (a.k.a 삽질의 연속)

세그먼트 콘트롤을 그냥 (테이블뷰 커스텀) 셀 위에다 올려버렸더니 저렇게 셀이랑 겹쳐서 나옴

해결 방법: 네비게이션 위에다가 세그멘티드 올림
Thanks to 제임스 👍

원래의 미션은
왼쪽 세그먼트를 클릭했을 때는 미완성 테이블뷰를 보여주고
오른쪽 세그먼트를 클릭했을 때는 빨간색 뷰컨을 보여주고 싶었으나
지금 사태는 뭘 누르든 빨간 뷰컨이 보임...ㅎ

이슈 원인: 뷰 컨을 총 3개를 만들어줘야 하는건데
그냥 오픈마켓 테이블뷰 컨트롤러 위에다가 Segmented Control을 얹었따ㅎ

해결 방법: 뷰 컨을 3개로 나눠줌.

  • Master View Controller에다가 Segmented Control & Navigation Controller 적용
  • Open Market View Controller (테이블뷰) - 첫 번째 화면
  • Collection View Controller (컬렉션뷰) - 두 번째 화면

근데 이제는 아예 실행이 안됨 ^.ㅠ

에러 메시지: 2021-05-26 19:54:30.966174+0900 OpenMarket[45545:1354290][WindowScene] Failed to instantiate the default view controller for UIMainStoryboardFile 'Main' - perhaps the designated entry point is not set?

똘똘한 제임스한테 물어봤더니 바로 해결됨 ^.^ 👍

이슈 원인: 디폴트 뷰컨트롤러가 설정이 안돼 있었음

메인 스토리보드 → Navigation Controller 선택 → (5번째) Simulated Metrics 선택 → View Controller → Is Initial View Controller가 마킹 돼있어야 함!!!
마킹하고 실행해보니 실행 잘됨 !!


profile
iOS Developer

0개의 댓글