Bounds와 Frame은 모두 CGRect 타입이며 origin 즉 원점을 나타내는 데이터와 size를 나타내는 데이터를 갖고있습니다.Bounds는 자신만의 좌표시스템에서의 View의 위치와 크기 값이고 origin은 디폴트로 (0,0)으로 설정되어 있으며 주로 Vi
시뮬레이터는 Mac에서 실행되는 앱이기 때문에 CPU, 메모리 및 네트워크 연결을 비롯한 컴퓨터 리소스에 액세스할 수 있지만 실제 디바이스의 메모리 및 네트워크 속도와 다르기 때문에 실제 디바이스가 없다면 정확한 성능 테스트를 할 수 없습니다. 실제 맥에서는 부드럽게
Core data
UIKit 앱의 뷰 계층 구조를 관리하는 객체이다뷰의 사용자 상호 작용에 응답한다전체 인터페이스의 레이아웃을 관리한다앱에서 다른 ViewController를 포함한 다른객체들과 조정을 한다데이터가 변경되면 뷰의 콘텐츠를 업데이트할 수 있다
디바이스에 애플리케이션이 설치될때, 앱스토어와 운영체제가 디바이스에 맞게 설치되도록 설치 최적화 기술을 의미한다. 최소한의 디스크 사용과 빠른 다운로드가 가능하다슬라이싱앱이 지원하는 여러 디바이스에 각각의 조각 애플리케이션 번들 생성, 해당 디바이스에 적합한 조각을 전
보류
애플리케이션이 실행될 때 코드의 첫 진입점을 찾게되는데 이 @main을 통해 진입점을 알려줄 수 있다...?
Foreground에 있을 때에는 메모리 및 기타 시스템 리소스에 대해서 background보다 높은 우선순위를 가지며 시스템은 이러한 리소스를 사용할 수 있도록 필요에 따라 background 앱을 종료합니다Background에 있을 때에는 가능한 적은 메모리 공간을
상태변화에 따른 앱딜리게이트 메서드는, 애플리케이션이 실행된 직후 사용자의 화면에 보여지기 직전에 호출 되는 application메서드가 있고, 애플리케이션이 최초 실행될 때 호출되는 application 메서드, 애플리케이션이 InActive 상태로 전환되기 직전에
전화나 메시지 같은 인터럽트가 발생하거나, 미리알림 같은 특정 알림창이 화면을 덮어서 앱이 실질적으로 event를 받지 못하는 상태 In-Active 상태가 된다.앱을 처음켜거나, foreground에서 background, background에서 foreground
Not running은 앱이 실행되지 않은 상태를 말하고 Inactive는 app이 실행중이지만 사용자로부터 event를 받을 수 없는 상태입니다. Active는 app이 실제 실행중이고 사용자 event를 받아서 상호작용할 수 있는상태이고 background는 홈화면
NSOperation과 GCD모두 쉽고 간편한 멀티스레딩 처리를 도와주는 API인데요, GCD(Grand Central Dispatch)는 C 기반의 low-level API이고 NSOperation은 Obj-C 기반으로 만들어진 high-level API입니다. \+
앱을 실행하면 시스템이 자동으로 메인스레드 위에서 동작하는 Main 큐를 만들어서 작업을 수행하고 그 외에 여러 개의 Global 큐를 추가적으로 만들어서 큐를 관리합니다. 개발자가 작업의 유형을 설정해서 큐에 작업을 할당하면, GCD API가 자동으로 이 큐에 대한
1\. userInteractivemain thread에서 작업, 사용자 인터페이스(UI) 새로고침 또는 애니메이션 수행과 같이 사용자와 상호작용 하는 작업작업이 신속하게 수행되지 않으면, UI가 중단된 상태로 표시될 수 있음반응성(responsiveness)과 성능(
cocoa touch framework 가 UIKit을 포함하는데 이 UIKit이 사용자 인터페이스를 구성하는데에 필수적입니다.coaoa touch앱의 다양한 기능구현에 필요다양한 핵심프레임워크를 포함하는 최상위 레벨 프레임워크media그래픽 관련 서비스나 오디오나 비
Foundation Kit은 Cocoa Touch framework에 포함되어 있는 프레임워크 중 하나로 String, Int 등의 원시 데이터 타입과 컬렉션 타입 및 운영체제 서비스를 사용해 앱의 기본적인 기능을 관리하는 프레임워크 입니다. iterator, json
delegate란 객체 지향 프로그래밍에서 하나의 객체가 모든 일을 처리하는 것이 아니라 처리해야 할 일 중 일부를 다른 객체에게 넘기는 것을 의미한다.retain(유지하다) : 메모리가 해제되지 않아서 낭비되는 현상을 의미 (Memory Leak, 메모리 누수)Del
NotificationCenter는 등록된 모든 Observer에게 정보를 전달하는 메커니즘입니다. observer는 notification들을 감지하고 있고 sender는 필요할 때 해당 observer에게 notification들을 보내주는 역할을 합니다. 옵저버를
MainThread\+이유 추가
애플리케이션 번들은 애플리케이션의 성공적인 작동에 필요한 모든것을 저장합니다.애플리케이션 번들은 앱의 코드를 포함하고 있는 실행 가능한 파일인 my app, 앱을 표시하는 application icons, bundle ID, 버전 번호 등 앱에 대한 구성 정보를 포함하
모든 View Controller 객체의 상위 클래스는 UIViewController입니다.UIViewController는 뷰의 내용을 업데이트하고, 뷰와 사용자의 상호 작용에 응답하고, 기본 데이터의 변경에 대한 응답으로 뷰의 콘텐츠를 업데이트하고, 뷰 크기 조정 및
Xib 이용해서 구현Xib을 생성하고 또한 별도의 UIView을 상속받은 Class을 생성한다. 그리고 Xib에서 owner로 해당 클래스를 임명하고 커스텀 클래스 내에서 초기화 시, Xib 파일을 불러와 view로 임명하는 코드 추가를 하고 원하는 작업들을 Story
view는 사용자 인터페이스의 기본 구성 요소이며 모든 조작은 main thread에서 해야합니다또한, 화면에 content 표시, 그리기 및 애니메이션, 오토레이아웃, 제스처 인식 등 화면에 관한 것들을 담당하는 객체입니다.main thread란?앱을 실행시키면 기본
UIView에 CALayer타입인 layer를 가지고 있습니다. 이 Layer 객체는 UIView의 작업 중에서 화면에 그리는 작업들을 받아 수행하는 역할을 하는 객체입니다.
윈도우는 UIView의 자식 클래스이며 뷰들을 담는 컨테이너 역할을 합니다.뷰의 계층 구조에서 최상의 뷰의 역할을 할 고정적인 객체의 역할을합니다.코드로 화면을 구현할 때에는 window를 직접생성해야하며스토리보드를 통해 화면을 구현할 경우에는 window가 자동으로
네이게이션 스택을 사용하여 뷰컨트롤러를 순차적으로 보여주는 역할을 한다.
TableView 동작 방식awakeFromNib를 호출하여 cell을 만들어 준 뒤 각 섹션에 필요한 로우의 갯수와 셀의 정보를 datasource에게 요청합니다. 그러면 tableView가 datasource에 맞게 화면에 나타나게 됩니다.화면에 Cell을 출력하
tableview 메서드에서 매개변수로 받은 tableView가 원하는 tableView가 맞는지 구분해서 구현하면 됩니다. tag를 등록하여 구분하는 방법도 있습니다.
setNeedsDisplay는 view 내용을 다시 그려야 함을 시스템에 알리고, setNeedsLayout은 레이아웃을 다시 그려야 함을 시스템에 알립니다.
딕셔너리는 메모리가 부족하면 값을 삭제하는 코드를 작성해야 하지만 NSCache는 메모리가 자동으로 관리된다. NSCache 는Thread-safe하다. 데이터를 쓸때마다 lock을 해줄 필요가 없다.위까지만 대답하자..NSCahce는 key를 복사하지않고 유지한다.
URLSession는 HTTP/HTTPS를 통해 콘텐츠 및 데이터를 주고받기 위해 API를 제공하는 클래스입니다. Session configuration 을 결정하고 Session 생성합니다. (쿠키나 캐시를 사용할 것인지 아닌지 등)통신할 URL설정을 사용할 task
tableView의 cell을 재사용하기 위해 콘텐츠와 관련이 없는 셀 속성을 reset하는 함수이고 dequeueReusableCell 메서드에서 객체가 반환되기 직전에 호출됩니다.
?
총 9가지처음에 Init이라는 메소드가 호출되면서 해당 뷰 컨트롤러가 lifetime동안 필요한 자원들을 할당 받게 되구요 그다음에 loadView가 호출되면서 본격적으로 화면에 띄어질 View를 만듭니다. outlet들과 action들이 이 메소드에서 생성되고 연결됩
TableView와 CollectionView는 UIScrollView를 상속받는 클래스로 TableView는 1차원의 형태로, CollectionView는 2차원의 형태로 리스트를 보여준다는 차이점이 있습니다.TableView는 간단한 목록으로 데이터를 표현할 때,
NSLayoutConstraint의 인스턴스를 생성하는 방법불필요한 매개변수들도 지정을 해줘야한다.NSLayoutAnchor를 이용하는 방법 (권장)NSLayourConstraint객체를 만들어내는 클래스이다.가독성이 뛰어나다anchor는 닻이란 뜻이고 view에 닻을
뷰에 제약사항을 걸어줄 때 공간이 남게 되면 hugging이 높은 뷰는 자신의 크기를 유지하고, 낮은 뷰는 남은 공간만큼 뷰의 크기가 커지게됩니다.반대로 공간이 부족하게 되면 resistance가 높은 뷰는 자신의 크기를 유지하고, 낮은 뷰는 부족한 공간만큼 크기가 작
Intrinsic Size는 콘텐츠의 본질적인 크기입니다.UILabel에서 컨텐츠의 길이가 변하면 자동으로 계산해주는 것에 사용되는 것과 같습니다.만약 콘텐츠 길이가 view의 길이보다 짧다면?Intrinsic Size: 콘텐츠 본질적인 크기Frame Size: 뷰의
직관적으로 앱의 흐름을 파악할 수 있고, 코드를 몰라도 view를 구성할 수 있다는 장점이 있지만 뷰가 복잡해지면 Storyboard의 크기가 커져서 로드하는데 시간이 오래걸리게 되는 단점이 있습니다.
컨텐츠를 가리지 않는 것이 보장되는 영역status bar, navigation bar ,tool bar 등에도 덮이지 않는 뷰를 그리기 위함
Left Constraint는 어떤 객체의 왼쪽을 뜻하고, Leading Constraint는 어떤 객체의 앞쪽 가장자리를 뜻한다.예를 들어 한국어는 왼쪽에서부터 오른쪽에서 읽는 형식이여서 left Constraint도 왼쪽이고 Leading Constraint도 왼쪽
클래스는 참조 타입이지만, 열거형과 구조체는 값 타입이다.클래스는 상속(단일상속만 가능)이 가능하지만 열거형과 구조체는 상속이 불가능합니다.공통점: 이 세가지 모두 확장이 가능하다확장이란?
dynamic dispatch(런타임)보다 static dipatch(컴파일 타임)를 지향한다.클래스를 선언할 때 상속되지 않는 클래스에 final을 붙이면 성능이 향상됩니다.
Copy On Write는 A라는 변수에 B라는 변수를 할당해주었을 때, 새로 메모리에 할당하는 것이 아니라, B의 메모리를 A가 공유하는 형태로 구성됩니다. 그러다가 A가 값이 수정될 때 새로 메모리에 할당이 되는 식으로 동작합니다.
초기화 종류에는 지정 이니셜라이저(designated initializer)와 convenience init이 있습니다. 지정 이니셜라이저는 클래스를 초기화 할 때 자신의 모든 멤버를 초기화 해야하고, convinence는 이 지정 이니셜라이저를 반드시 호출해야하는 초
AnyObject는 모든 클래스 타입의 인스턴스를 나타낼 수 있는 프로토콜입니다.AnyObject로 선언 시, "클래스 타입"만 저장할 수 있습니다.
Optional은 물음표 키워드를 사용하며 값이 nil일 수 있다는 것을 표현합니다. 스위프트에서 기본적으로 변수 선언시 nil값을 허용하지 않기 때문에 nil값이 들어갈 수도 있는 상황이라면 Optioal처리를 해줘야합니다. 이는 뜻밖의 오류를 런타임이 아닌 컴파일
Struct는 변수나 함수를 모아서 하나의 형태로 구성할 수 있는 구조체를 의미합니다. Struct에 변수나 함수를 정의한 후 외부에서 인스턴스를 생성해 구조체 해당 구조체 안에 정의되어 있는 프로퍼티와 메서드에 접근하여 사용할 수 있습니다. \+값 타입(복사: Cop
서브스크립트란 파라미터로 키나 인덱스를 받고 그에 해당하는 value나 element를 반환하는 형태입니다. 서브스크립트를 연산 프로퍼티와 비슷하게 직접 정의하여 사용할 수도 있습니다. 대괄호( ) 키워드를 사용해 접근합니다.
Swift에서 String은 utf8, utf16, unicodeScalar 등 여러 데이터 형태로 존재하며 Character도 마찬가지라서 크기가 가변적이기 때문에 Subscripts로 특정 index에 접근하지 못합니다...???
인스턴스 메서드는 해당 객체의 인스턴스를 생성하여 생성된 인스턴스를 통해 호출할 수 있는 메서드 입니다. 반면 class메서드는 인스턴스를 만들어 실체화하지 않아도 클래스를 통해 직접적으로 호출할 수 있습니다. 하지만 struct나 enum은 상속이 불가능하기 때문에
서브클래스에서, class메서드는 오버라이딩 가능하지만 static메서드는 오버라이딩이 불가능합니다.
delegate패턴이란 하나의 객체가 모든일을 처리하지 않고 처리해야할 일부를 다른 객체에게 위임하는 것을 뜻합니다. 제가 만든 todolist프로그램에서 A가 일정을 보여주는 화면이고 B가 일정을 수정하는 화면인데, B에서 일정을 수정하고 A화면으로 돌아왔을 때 수정
싱글톤 패턴은 객체의 인스턴스를 한번만 생성하여 공유하고 싶을 때 사용하는 방법입니다. 만약 제 자신을 person이라는 객체로 표현한다고 가정하겠습니다. 만약 세개의 뷰 컨트롤러에 의해 제 이름, 나이, 성별이 따로 정해지는 경우 '저'라는 하나의 인스턴스를 공유하여
KVOKVO는 A객체에서 B객체의 키의 값이 변화됨을 감지할 수 있는 패턴입니다. 위의 두 패턴이 주로 Controller와 다른 객체 사이의 관계를 다룬다면, KVO 패턴은 객체와 객체 사이의 관계를 다룰 때 적합합니다.메소드나 다른 액션에서 나타나는 것이 아니라,
각각 언제 사용한다고 생각하시나요?Delegate는 한 화면에서 많은 이벤트와, 해당되는 객체의 데이터를 가져와야할 때 쓰면 적합하다고 생각해요. TableView의 Delegate함수를 보면 셀 갯수, 셀 설정, 셀 크기, 등 많은 이벤트를 위한 함수와, 이벤트가 발
멀티 스레딩을 사용하는 이유 시간이 오래걸리는 작업 진행 시 어플리케이션의 실행을 방해하면 안되기에 멀티 코어에서 큰 작업을 여러개로 분할하여 진행해야 하기에 메모리 공간과 시스템 자원 절약하기 위해서 고려해야할 점 어떤 작업을 글로벌 큐에 넣어야 할지 정확히 알
mvc,mvp,mvvm 따로 공부 예정
특정 역할을 하기 위한 메소드, 프로퍼티, 기타 요구사항 등의 청사진(자세한 계획을 일컫는다)프로토콜은 class나 struct의 행동을 정의하는 역할을 합니다.프로토콜은 행동을 정의하기만 할 뿐 구현하지 않습니다. 어떠한 클래스나 구조체가 해당 프로토콜을 따른다는 것
Protocol Oriented Programming은 프로토콜 중심 프로그래밍, Object Oriented Programming은 객체 중심 프로그래밍입니다.POP는 프로토콜 확장을 통하여 수평 구조로 타입을 확장하고, OOP는 슈퍼클래스의 상속을 통하여 수직 구조
hashable은 hasher를 통해서 Int타입의 해쉬 값을 만들어주는 프로토콜입니다. hash란 해시함수에 의해 얻어지는 값으로 hash함수는 임의의 길이의 데이터를 고정된 길이의 데이터로 매핑하는 함수입니다. 예를 들어 김지훈이라는 스트링을 해시함수를 통해 정수인
클래스는 reference 타입이고 struct와 enum 는 value type입니다.값 타입의 속성은 기본적으로 인스턴스 메서드 내에서 수정할 수 없습니다.만약 수정해야하는 경우 mutating을 붙여주면 됩니다.이유: swift는 메모리를 절약하기 위해 Copy
원래 클로저가 탈출하면 안되는 이유클로저가 함수 내부에서만 쓰이기 때문에 컴파일러가 메모리 관리를 지저분하게 하지 않아도 돼서 성능이 향상함 non-escaping인 경우 함수가 종료됨과 동시에 클로저도 사용이 끝나지만 escaping의 경우 함수가 종료 되더라도 실제
extension은 기존 존재하는 클래스,구조체,열거형,프로토콜 타입에 새로운 기능을 추가할 수 있게 해줍니다.
새로운 기능을 정의하는 것은 가능하지만 override할수는 없습니다.
defer란, 현재 코드 블록을 나가기 전에 꼭 실행해야 되는 코드를 작성하여코드가 블록을 어떻게 빠져 나가든 꼭 마무리해야 되는 작업을 할 수 있게 도와줍니다.
코드블록 순서로 호출되며, 같은 코드블럭일 경우 역순으로 호출됩니다. defer를 읽지 않고 return을 하는 경우 defer가 호출되지 않습니다.
프로퍼티 래퍼는 어떤 값이 있으면 이 값을 한 번 감싸서 저장을 위한 로직과 얻어오기 위한 로직을 어느정도 분리해서 반복을 줄여줄 수 있는 방법을 제공하는 속성입니다. 프로퍼티 래퍼를 사용하면 코드의 재사용성을 높여 코드가 짧아지는 효과를 나타낼 수 있습니다.
generic이란 어떤 함수가 호출 될 때 매개변수의 타입을 함수가 호출할 때 정해주어서 어떤 함수의 매개변수에 대한 타입 설정에 자유도를 부여한것입니다. 이렇게 사용하면 매개변수의 타입만 다르고 같은 기능을 하는 함수들에 대해서 하나의 함수로 표현할 수 있어 재사용성
some키워드는 return값에 불투명한 타입이 있음을 나타냅니다. 불투명한 타입이란 어떠한 타입을 리턴할 지 모른다는 것입니다. some키워드를 사용하면 함수 내부의 리턴 값에 따라 리턴 타입이 지정됩니다.
에러 처리를 편리하게 도와주는 타입입니다. 잘 모르겠음..
Codable은 인코딩과 디코딩 프로토콜을 합친 타입입니다. 데이터 형식을 외부 표현식으로 변환 하는 것을 인코딩이라고 하고 외부 표현식에서 데이터 형식으로 변환하는 과정을 디코딩이라고 합니다. Codable을 따르게 되면 해당 코드 블럭이 인코딩이나 디코딩이 가능하다
불필요한 접근으로 의도치 않은 결과를 초래하거나 꼭 필요한 이상의 코드가 노출될 위험이 있을 때 사용 은닉화란 클래스의 프로퍼티를 private으로 만들어 클래스 밖에서 함부로 접근할 수 없도록 하는 것을 말함 클래스를 사용할 때 프로퍼티에 직접 접근하는 것은 데이터
함수형 프로그래밍은 함수를 일급 객체로 보고 순수함수 위주로 코드를 작성하는 것을 의미합니다. 순수함수를 이용하여 병렬처리 하는데에 안정성을 보장합니다. 순수함수란 인풋이 같으면 아웃풋이 같은 함수이고, 함수 내에서 외부의 값들을 변경하지 않는 함수를 의미합니다.