-
[iOS] Object Graphs 와 Archives, 그리고 SerializationiOS/🍎 Documentation 2021. 5. 24. 18:54
이 글을 통해 알게 되는 것들 Apple 공식 문서에 등장하는 Object Graph 이란? Archives 란? Serialization 이란? 개요 제가 Object Graph 를 검색하게 된 계기는 NSKeyedArchiver 의 타입 메서드인 archivedData(withRootObject:requiringSecureCoding:) 의 설명에서Object Graph 라는 단어를 발견했기 때문입니다. 이것은 플랫폼에 종속적인 용어가 아니기 때문에 여러 객체 간의 관계를 가리키는 가리키는 그래프 라는 정도의 대략적인 개념은 알고 있었지만, 애플 공식 문서에서 설명하는 자료를 찾고 싶었습니다. 마침 그런 문서가 있었고, 이 문서를 정리하게 되었습니다. 추가적으로 Archives 와 Serializat..
-
[iOS] does not implement methodSignatureForSelector: -- trouble aheadiOS/🛠 이슈와 궁금증 2021. 5. 24. 01:49
2021-05-24 01:46:51.846363+0900 DataPersistence[26819:4680912] *** NSForwarding: warning: object 0x6000004e77b0 of class 'DataPersistence.Language' does not implement methodSignatureForSelector: -- trouble ahead 문제가 발생한 클래스에 NSCoding 프로토콜을 채택 (conforming to NSCoding Protocol)하면 해결된다. 위 로그에서는 Language 클래스에서 발생했다. 끝! 🤖🟢[우짱의 iOS 블로그]🔵💻 iOS를 공부하면서 배운 내용을 기록하고 있습니다.
-
[iOS] NSCoding 이란? (feat. 인코딩, 디코딩, 아카이빙)iOS/🍎 Documentation 2021. 5. 23. 20:48
안녕하세요. 오늘은 공식문서에서 설명하는 NSCoding 를 공부해보겠습니다🐶 NSCoding protocol NSCoding NSCoding은 클래스가 encoding 과 decoding 되는 것을 가능하게 해주는 프로토콜입니다. 다시 말하면, NSCoding 을 채택한 클래스는 encoding 과 decoding 이 가능해집니다. 인코딩은 기존의 형식을 다른 형식으로 변환하는 것을 가리킵니다. 예를 들어 Swift 의 Struct 인스턴스를 JSON 형태의 문자열로 변환시키는 것은 JSON Encoding 이라고 부를 수 있습니다. 디코딩은 그 반대입니다. 그리고 Encoding 과 Decoding 은 아카이빙(Archiving) 과 디스트리뷰션(Distribution) 에 필요합니다. 개요 프로토콜..
-
[iOS] KVO 란? (Key Value Observing)iOS/🤖 App 2021. 5. 22. 19:55
1차 수정: 2021/06/08 안녕하세요. 이번 시간에는 KVO 에 대해 공부해보겠습니다🐶 Observing 이라는 단어는 감시한다는 의미를 가지고 있죠. 그렇다면 KVO는 무엇을 감시하는 것일까요? 바로 다른 오브젝트의 속성입니다. KVO 는 B 라는 오브젝트의 속성 값이 변경되었을 때, A 라는 오브젝트가 알게 되는 것입니다. KVO는 모델 레이어와 뷰 레이어 같이 논리적으로 분리되어 있는 오브젝트간 메시지 전달에 유용합니다. 예를 들어 모델 레이어에서 값이 변경되면, 감시하고 있던 뷰 레이어에게 전달되어 변경에 대응할 수 있는 것입니다. 감시할 속성에 표시하기 class MyObjectToObserve: NSObject { @objc dynamic var myDate = NSDate(timeInt..
-
[Swift] 프로토콜 총정리iOS/🟠 Swift 2021. 5. 22. 15:11
[ 프로토콜 개요 ] - https://woozzang.tistory.com/44 요약: 프로토콜은 요구사항이며, 프로토콜을 채택한 형식은 요구사항을 반드시 구현해야합니다. [ 속성 요구사항 ] - https://woozzang.tistory.com/45 요약: 프로토콜에서 속성은 가변성과 상관없이 반드시 var 키워드만 올 수 있습니다. [ 메서드 요구사항 ] - https://woozzang.tistory.com/48 요약: 메서드 요구사항의 규칙은 속성 요구사항과 유사합니다. [ 생성자 요구사항 ] - https://woozzang.tistory.com/53 요약: 생성자는 클래스의 경우 상속에 대비해 구현시 `required` 키워드를 붙여야 합니다. [ 서브스크립트 요구사항 ] protocol ..
-
[iOS] - Cocoa Touch 에서 JSON 다루기iOS/🤖 App 2021. 5. 7. 23:27
1차 수정: 2021.05.25 JSON = JavaScript Object Notation 🤔 사전 지식 - JSON 이란? 단순하게 데이터를 표현하는 방법 중 하나이다. (통신 방법도 아니고, 프로그래밍 문법도 아니다. 포맷이다 !!!!) 서버와 클라이언트 간의 데이터 교환에서 일반적으로 많이 사용된다. 클라이언트가 API Request 를 보내면 서버가 응답으로 JSON 데이터를 보내준다. JSON의 포맷은 자바스크립트 객체 표기법을 따른다 key - value 쌍을 이루어 표현하며, key는 문자열이다. 문자열은 " " 쌍따옴표를 사용하여 표기한다. { } 와 내부에 key-value 로 구성된다. 즉 Swift 딕셔너리와 유사한 구조이다. JSON형식에서는 null, number, string,..
-
[Swift] - Capturing Values by Closures (값을 캡처하는 클로저)iOS/🟠 Swift 2021. 5. 7. 15:49
클로저는 스코프 밖의 값에 접근할 때 값을 캡처합니다. 클로저에는 Named clousure 과 Unnamed closure 가 있지만, 여기서는 Unnamed closure 를 가리킵니다. 참고로 Named clousure 중 global function 는 값을 캡처하지 않습니다. 값을 캡처한다는 의미는, 값의 참조를 획득한다는 뜻입니다. 따라서 참조된 값을 클로저 스코프 내부에서 변경되면, 실제 값도 변경됩니다. var count: Int = 0 print(count) // "0" var closure = { count += 1 // 스코프 외부의 값(count)에 접근하였으므로, 참조를 획득하였습니다. } print(count) // "0" :::: 클로저를 선언만 했을뿐, 호출하지는 않았습니다...
-
[Swift] 셀렉터(Selector)란?iOS/🟠 Swift 2021. 5. 2. 16:00
1차 수정 : 2021/06/16 2차 수정: 2021/07/05 3차 수정: 2021/07/08 4차 수정: 2022/02/13 안녕하세요🐶 이번 시간에는 셀렉터에 대해 알아보겠습니다. 항상 Objective-C 와 관련된 개념이 나오면 막연히 어려워지는 느낌이 드는데요.... 다행히 셀렉터는 그렇게 어려운 개념은 아닙니다~~ 그럼 시작해볼게요!!🔥 셀렉터는 메서드를 식별할 수 있는 고유한 이름입니다. Swift에서는 struct 타입이며 컴파일 타임에 지정됩니다. " A selector is the name used to select a method to execute for an object, or the unique identifier that replaces the name when the so..
-
[Swift] - defer 문이란?iOS/🟠 Swift 2021. 4. 29. 17:36
선언된 블록의 실행을 스코프 종료 직전까지 연기시키는 키워드 "호출 시점과 실행 시점이 다르다" 용도 : 주로 코드에서 사용했던 자원을 정리할 때 사용한다. 예시) 파일 처리 에서 파일 닫기 func processFile(path: String) { let file = FileHandle(forReadingAtPath: path) // Process if path.hasSuffic(".jpg") { return // closeFile()이 호출되지 않음 } file?.closeFile() } 💡해결 defer 문 안에 closeFile 을 구현해 놓으면 함수 반환 직전에 실행을 보장할 수 있다. func processFile(path: String) { let file = FileHandle(forRea..