iOS 환경에서 백그라운 작업의 결과, 비동기 작업의 결과 등 현재 작업의 흐름과 다른 흐름의 작업으로부터 이벤트를 받으려고 할 때 Notification을 많이 사용합니다. 예를 들면, 대용량 파일을 다운로드하는 스레드를 생성하고 다른 페이지에서 다른 작업으로 넘어가도 다운로드 완료 알림 팝업을 띄울 수 있는 것이 있습니다. 물론 다른 방법도 존재하지만... 예를 들자며는... 그렇다는 겁니당 Notification Notification Center를 통해 정보를 전달하기 위한 구조체입니다. // 알림을 식별하는 태그 var name: Notification.Name // 발송자가 옵저버에게 보내려고 하는 객체. 주로 발송자 객체를 전달하는 데 쓰임 var object: Any? // Notifica..
상당히 메모리 제약이 큰 모바일 어플리케이션 환경에서 멀티 프로세싱은 필수적입니다. 하지만 그에 대한 관리를 하는 것은 정말 어려운데요... 그래서 GCD 애플에서 개발한 멀티코어, 멀티 프로세싱 환경에 최적화된 기술입니다. 기본적으로 스레드 풀의 관리를 프로그래머가 아닌 운영체제에서 관리하기 때문에 프로그래머가 태스크(작업)을 비동기적으로 쉽게 사용할 수 있습니다. 프로그래머가 실행할 태스크(작업)을 생성하고 Dispatch Queue에 추가하면 GCD는 태스크(작업)에 맞는 스레드를 자동으로 생성해서 실행하고 작업이 종료되면 해당 스레드를 제거합니다. Dispatch Queue DispatchQueue는 작업항목의 실행을 관리하는 클래스입니다. 대기열(Queue)에 추가된 작업항목은 시스템이 관리하는..
ATS 애플리케이션과 웹 서비스 사이에 통신 시 보안 향상을 위한 기능으로 iOS 9.0, macOS 10.11부터 적용 가능합니다. 모든 인터넷 통신 시 안전한 프로토콜을 사용하도록 보장하는 것으로 사용자의 민감한 정보가 유출되는 것을 방지합니다. URLSession, CFURL 그리고 NSURLConnection API를 이용해 데이터를 주고받을 때 ATS 기능을 기본적으로 사용하게 됩니다. ATS가 활성화되어있을 때는 HTTP 통신을 할 수 없으며 애플에서 권장하는 아래 요구 사항을 충족하지 않은 네트워크는 연결에 실패할 수 있습니다. 예외사항 애플리케이션이 ATS가 요구하는 사항을 충족하기 힘든 경우, ATS 기능을 비활성화할 수 있습니다. 아래는 ATS 기능을 사용하지 않을 수 있는 예외사항입니..
요즘 앱들을 보면 iOS 뿐만 아니라 AOS 까지 거의 다 하단에 탭이 있는 Tabbar로 페이지를 구분하는 형태가 많습니다. 폰이 길어져서 그런다~ 사용자 UX가 좋다 등 결국 사용자가 편하다 라는 이유로 점점 더 대중화되고 있습니다. iPhone 기본앱들도 거의 다 사용하는 이 Tabbar 를 톺아보도록 하겠습니다. 탭바 컨트롤러가 존재하고 UIViewController를 탭바 컨트롤러에 연결함으로써 페이지를 추가할 수 있습니다. 바로 구현으로 들어가 볼게요 :) UIViewController에 Tab bar Controller를 임베디드 시켜 줍니다. 요렇게 선택한 UIViewController가 하나의 tab으로 설정된 Tab bar Controller가 생성됩니다. storyboard 에 UIV..
모바일 앱을 사용하다 보면 현재와 다른 흐름 또는 알림, 경고 등을 위해서 팝업 형태의 창을 자주 띄우는 데요 iOS 에서 대표적으로 Alert, ActionSheet가 있습니다. Alert 와 ActionSheet는 화면에 보여지는 것만 다를뿐, 구성요소는 같습니다. Alert 중요한 액션을 하기 전 경고가 필요한 경우 액션을 취소할 기회를 제공해야 하는 경우 사용자의 작업을 한 번 더 확인하거나 삭제 등의 작업을 수행하거나 문제 사항을 알릴 때 결정이 필요한 중요 정보를 표시할 경우 Action 사용자가 고를 수 있는 액션 목록이 여러 개일 경우 새 작업 창을 열거나, 종료 여부 확인 시 사용자의 결정을 되돌리거나 그 동작이 중요하지 않을 경우 스타일 지정을 통해서 Alert 형태로 구현할 것인지, ..
이전에서 UICollectionView의 구성요소와 레이아웃, 구현을 위한 클래스, 프로토콜을 톺아보았습니다 ;) 이번에는 UICollectionViewCell, UICollectionViewDataSource, UICollectionViewDelegate에 대해서 알아보겠숩니다. 예제는 다음다음시간에... UICollectionViewCell 컬렉션뷰 셀의 구성요소 관련 프로퍼티 //셀의 콘텐츠를 표시하는 뷰입니다. var contentView: UIView /*셀의 배경을 나타내는 뷰입니다. 이 프로퍼티는 셀이 처음 로드되었을 경우와 셀이 강조 표시되지 않거나 선택되지 않을 때 항상 기본 배경의 역할을 합니다.*/ var backgroundView: UIView? /*셀이 선택되었을 때 배경뷰 위에 ..
내비게이션 바의 콘텐츠를 표시하는 객체가 되는 것이 Navigation Item입니다. 페이지가 전환될 때마다 내이게이션바는 하나의 공동객체지만. Navigation Item은 각각의 뷰 컨트롤러가 가지고 있는 프로퍼티입니다. 위 처럼 내비게이션바는 내비게이션 컨트롤러에 종속되지만, 내비게이션 아이템은 해당 뷰 컨트롤러에 종속됩니다. 이 내비게이션 아이템은 BarButtonItem으로 구현이 되는데 이는 UIToolbar의 Item에도 똑같이 적용됩니다. 바 버튼 아이템에는 활용하기 좋은 스타일들이 많이 있습니다. 바 버튼 아이템의 Attribute Inspector 에서 SystemItem을 클릭하면 다양한 스타일을 지정할 수 있습니다. 주요 상수 UIBarButtonItem.Style : 아이템 스타..
스크롤뷰 스크롤뷰 안에 포함된 뷰를 상,하,좌,우로 스크롤 할 수 있고 확대 및 축소할 수 있습니다. 이를 상속받아 활용되는 뷰가 UITableView, UICollectionView, UITextView 등이 있고 주로 사진 확대 축소할때 많이 사용합니다. 다양한 기능을 가진 만큼 정말 다양한 프로퍼티와 메서드가 있는데요. 쭉~ 나열해보고 사진 확대 예시로 넘어가겠습니다. 콘텐츠 크기 및 오프셋 관리 //콘텐츠뷰의 크기 var contentSize: CGSize { get set } //콘텐츠뷰의 원점이 스크롤뷰의 원점에서 오프셋 된 지점 var contentOffset: CGPoint { get set } //스크롤뷰의 원점에 대한 콘텐츠뷰의 오프셋 설정. func setContentOffset(_ ..
OperationQueue 란, 동시성(Concurrecny) 프로그래밍 을 위해 iOS 환경에서 지원하는 라이브러리 입니다. 동시성(Concurrecny) 프로그래밍에 대한 자세한 설명은 동시성, 비동기 프로그래밍 톺아보기 에서 확인해 주세요 ㅎㅂㅎ OperationQueue 이름을 살펴보면 Opertaion + Queue 인데, 말 그대로 대기열(Queue)에 추가한 동작(Operation) 의 실행을 관리하는 추상 클래스입니다. 동작에는 연산 객체(Operation Object)가 들어가게 되고, 이는 Foundation 프레임워크의 Operation 클래스 인스턴스입니다. 대기열(Queue)에서 동작(Operation) 관리 //연산 객체(Operation Object)를 대기열(Queue)에 추..
프로그래밍을 하면서 항상 부딪히는 주제이고, 어려운 주제인... 동시성 프로그래밍, 비동기 프로그래밍에 대해서 정리해보고자 합니다. 먼저 필요한 기본 개념들을 하나씩 짚어보고 갈게요..! 프로세서, 코어, 프로그램과 프로세스, 스레드 프로세서 프로그램을 수행하는 하드웨어 유닛 멀티 프로세서 : 한 컴퓨터가 여러 개의 프로세서를 갖는것. (듀얼 프로세서 : 2개의 프로세서) ex) CPU 코어 프로세서의 주요 연산회로 싱글코어, 듀얼코어 : 연산회로의 갯수 여러 개의 코어를 갖는 프로세서 또한 멀티 프로세서 프로그램, 프로세스 프로그램 : 보조기억 장치에 저장된 실행코드, active하지 않은 상태 프로세스 : 프로그램을 구동하여 프로그램 자체와 프로그램의 상태가 메모리상에서 실행되는 작업 단위, acti..