일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Algorithm
- 디자인패턴
- 코코아 인터널스
- OS
- Swift
- Opensource
- development
- SwiftUI
- IOS
- boostcamp
- 개발
- World
- Cocoa Internals
- Design Pattern
- Hello
- rxswift
- 부스트캠프
- 단위 테스트
- notion
- 알고리즘
- 커스텀 뷰
- 부트캠프
- WWDC
- Tistory
- 네이버 부캠
- 후기
- Today
- Total
목록전체 글 (47)
꿈돌이랜드
7.1.1 두 단계 초기화 패턴초기화 과정코코아 프레임워크의 객체들을 포함해서 NSObject에서 상속받은 모든 클래스의 인스턴스가 만들어지기까지는 두 단계에 걸쳐서 초기화가 이루어진다.Pen *aPen = [[Pen alloc] init];첫 번째 단계에서 Pen 클래스에 alloc 메시지를 보내서, 힙 공간에 객체 인스턴스 메모리 공간을 할당한다. 두 번째 단계에서는 객체 인스턴스에 init 메시지를 보내서 객체 인스턴스 속성이나 내부에 필요한 객체나 값을 초기화한다. …중략… 1단계에서 메모리 할당이 되지 않으면, 2단계 초기화 과정은 진행이 불가능하다.…중략두 단계 초기화를 한 단계로 줄여서 사용하기 위해 간편한 메서드를 클래스 메서드로 제공하기도 한다.Pen *aPen = [Pen new];이 ..
🪙코코아 프레임워크 객체는 크게 두 가지로 분류할 수 있다. 하나는 객체를 초기화한 이후에는 내부 데이터를 변경할 수 없는 불변 객체이며, 다른 하나는 변경이 가능한 가변 객체다. 예를 들어 문자열을 다루는 NSString 클래스는 문자열을 바꿀 수 있는 인터페이스가 없는 불변 객체다. 가변 객체를 사용하려면 NSMutableString 클래스로 객체 인스턴스를 생성해야 한다.5.1.1 불변 객체의 특징불변 객체들은 다음과 같은 특징을 가진다.초기화 이후 객체 내부의 값이나 상태가 변하지 않는다.불변 속성 때문에 여러 객체에서, 여러 스레드에서 참조해도 안전하다.값이 바뀌는 상황을 고민하지 않기 때문에 설계가 쉽고 구현하기 수월하다.객체 내부에 모순된 상태가 줄어들어 부작용이 적다.…중략불변 객체를 사용..
4.1 NSCopying 계열 프로토콜코코아 프레임워크에서는 객체를 복사하기 위한 방법으로 또는 프로토콜을 지정해서 필요한 메서드를 구현하는 방법을 권장한다. 프로토콜은 객체를 복사하기 위해 클래스에 미리 구현해야 하는 복사용 메서드 목록을 지정해놓은 프로토콜이다. 애플이 만든 코코아 객체는 이미 프로토콜을 기반으로 만들어져 있어서 객체를 복사하기 쉽다. 프로토콜과 프로토콜 차이는 복사한 객체가 변경 가능한 객체인지 아닌지에 따라 달라진다.4.1.1 복사만 가능한 객체 프로토콜은 구현해야 할 메서드가 딱 하나뿐이다. 내가 만든 객체가 복사 가능한 객체여야 한다면 프로토콜을 선언하고 다음 메서드를 구현하면 된다.-(id)copyWithZone:(NSZone*)zone; // Objective-Cfunc c..
GCDGrand Central Dispatch(GCD)예전에는 프로세서의 클럭 속도를 높이는 방식으로 연산 속도를 높였지만 전력 소비와 프로세서의 클럭 속도 증가에 한계가 있어 멀티 코어 프로세싱이 탄생하게 되었고 이러한 프로세싱에서는 멀티 프로세스에게 어떻게 프로그램의 동작을 배분하는지 중요해졌다.GCD 이전에는 멀티 스레딩을 위해 Thread와 OperationQueue 등의 클래스를 사용했지만, 스레드는 이런 저런 이유로 복잡하고 관리하기가 까다롭고, OperationQueue는 GCD에 비해 무겁고 BoilerPlate 코드들이 많이 필요했다.GCD는 애플에서 개발한 기술로 스레드 관리와 실행에 대한 책임을 어플리케이션 레벨에서 운영체제 레벨로 전가시켰다. 작업단위는 Block(스위프트에서는 클로..
3.1.1 수동 참조 계산 방식과 비교ARC를 사용해서 자동으로 메모리를 관리한다고 해서 2장에서 설명한 참조 계산 방식이 다른 방식으로 새롭게 바뀐 것은 아니다.…중략ARC에서도 여전히 객체마다 참조 횟수가 있고, 객체 소유권에 대한 동일한 규칙을 기준으로 참조 계산을 진행한다. 수동 참조 계산 방식은 객체 소유권에 대한 동일한 규칙을 기준으로 참조 계산을 진행한다. 수동 참조 계산 방식은 객체를 생성하면서 소유권을 가지며, 특정 객체를 참조하기 전에 소유권을 요청하고 참조한 이후에는 소유권을 반환한다. ARC에서도 참조 계산을 위한 규칙과 방식을 그대로 적용한다. 시간 흐름 →MRC: alloc → init → doAction → retain → copy → release → release → dea..
8월 4일을 기점으로 해서 챌린지의 모든 일정이 끝났다. 챌린지를 시작한지, 벌써 한달이 훌쩍 가버렸다는 사실에 소스라치게 놀라고 있다. 챌린지 도중에는 참 시간이 안간다고 느꼈지만 끝나고 나니 벌써 달력을 한 장 넘기고 있다. 마치 군대 훈련소를 다녀온 느낌이랄까? 부스트캠프를 진행하면서챌린지 기간 동안 평일에는 미션을 수행하는데에 온 시간을 쏟았다. 미션 구현과 학습 정리까지 온전히 마치면 새벽 3~4시에 자는 것이 일상이 되었다. 한 번은 생체리듬이 이상해져서 하루종일 연속으로 2시간만 자게되고 수면시간이 파편화 되어서 낮잠을 20분씩 자면서 일정을 소화해 낸 적도 있다. 챌린지 과정을 소화하기 위해 본가로 내려와서 부모님의 도움을 받았는데 무사히 수료할 수 있게 해주신 부모님께 감사하다…무엇을 얻..
2.1 메모리와 객체운영체제가 관리하는 프로세스는 이론적으로 32bit인 경우 4GB까지의 크기를 가지는 가상 주소 공간에 접근할 수 있다. 64bit인 경우 18EB(2^64)까지 가능하다. macOS는 메인 메모리상의 사용하지 않는 공간을 페이지(가상 메모리 단위)로 나눠서 하드 디스크에 백업하는 기능을 제공한다. 반면 iOS는 하드 디스크가 없고 대신 플래시 메모리를 사용하기 때문에 늘 메모리가 부족하기 마련이다. iOS에서 읽고 쓰는 데이터는 프로그램을 실행하는 동안 사라지지 않지만, 사용하지 않는 읽기 전용 데이터는 페이지를 저장하고 메모리상에서 지워 버린다. iOS는 읽고 쓰는 데이터들의 총합이 일정 수준 이상 많아지면 메모리 부족 경고를 보내고, 그래도 부족하면 앱을 강제로 종료시켜서 메모리..
1.1.6 스위프트 오브젝티브-C 호환 객체오브젝티브-C 코드에서 스위프트 객체를 사용하려면 해당 스위프트 객체는 반드시 NSObject를 최상위 클래스로 지정하고 상속받아 만들어야 한다. 그렇지 않으면 스위프트 전용 객체로 동작하기 때문에 오브젝티브-C에서는 사용할 수 없다. 1.2.1 오브젝티브-C 객체와 메모리 구조오브젝티브-C에서 객체 인스턴스는 항상 힙 영역에 만들어지며, 해당 힙 메모리 주소를 스택 영역에 할당한 포인터로 참조해서 접근한다. 포인터 변수에 담긴 메모리 주소와 해당 주소의 객체 인스턴스가 실제로 유효한지를 포인터 주소만으로는 판단할 수 없다. 객체 포인터 변수는 이미 해제된 객체 주소를 저장하고 있는 위험한 포인터(dangling pointer) 일 수도 있다. 그래서 객체에 대..