일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- swiftUI
- 애니메이션
- 리팩토링
- 리펙터링
- Observable
- uitableview
- Protocol
- rxswift
- Human interface guide
- ios
- uiscrollview
- 스위프트
- UICollectionView
- ribs
- clean architecture
- map
- HIG
- UITextView
- Xcode
- 클린 코드
- swift documentation
- SWIFT
- collectionview
- Refactoring
- Clean Code
- tableView
- combine
- 리펙토링
- RxCocoa
- MVVM
- Today
- Total
목록struct (7)
김종권의 iOS 앱 개발 알아가기
struct, class 메모리 저장 위치strucrt는 보통 메모리에서 stack영역에, class는 heap영역이 저장되는데, 아래처럼 struct안에 class 타입이 있을때 이것은 어디에 저장될 것인가?class SomeClass { var value: Int init(value: Int) { self.value = value }}struct SomeStruct { var classInstance: SomeClass var otherValue: Int}결론은 SomeStruct는 stack영역에 저장되고, SomeStruct의 class타입인 프로퍼티 classInstance는 heap영역에 저장됨메모리 위치 알아내기swift에서 heap과 stack영역의 ..
Escaping closure에서의 self 캡쳐 value type인 struct의 mutating 키워드가 붙은 메서드에서, 클로저(escaping closure)내부에 self를 참조하는 경우에 발생 오류가 발생하는 이유 swift에서는 memory safety을 지키기 위해서 컴파일러 타임에 이런 케이스를 사전에 방어해주기 위해 이런 컴파일 에러를 표출 memory safety 개념은 이전 포스팅 글 참고 ex) memory safety하지 않은, memory access conflict 발생 코드 value타입에서 set과 get이 동시에 일어나는 경우 다시 돌아와서, "Escaping closure captures mutating 'self' parameter" 에러가 나는 이유? value ..
필드 이름 바꾸기 필드 이름을 변경하려고 할 때 이 필드가 여러곳에서 사용되고 있는 경우 변경 방법은 캡슐화를 통해 리펙토링 필드 이름 바꾸기에서 생각하는 포인트 변경하려는 필드가 여러곳에서 사용되고 있는 경우, 어떻게 바꿀것인가? 데이터 구조가 불변성으로 표현되면 좋은 이유? 필드 이름 바꾸기 예시 아래에서 name 필드를 title로 변경하고 싶은 경우? 이 값은 여러곳에서 사용되고 있기 때문에 쉽게 바꾸기 힘든 상황 name을 단순히 title로 변경하고난 후 빌드에러나는 곳을 찾아서 일괄 변경할 수 있지만 일괄 수정하다가 실수를 유발할 수 있음 (swift에서 일반적으로 데이터 모델은 struct를 사용하지만, 불변성의 중요성을 깨닫기 위해 class로 선언) class MyData { var n..
value type, reference type swift에는 2가지 타입이 존재 value type: struct, enum, collection, 기본타입(Int Double, Bool ...) reference type: class, function, closure 두 타입의 차이 - copying value tpye - 카피할때 데이터의 복사본을 생성 reference type - shared instance를 생성하여 같은 인스턴스를 바라보는 참조값을 생성 cf) value type을 사용하면, thread간 의도하지 않은 공유로부터 안전한 프로그래밍이 되어, 로버트 C. 마틴의 클린 코드에서 얘기하는 functional programming 핵심은 데이터의 불변성에 도움 메모리 공간 할당 일반..
필수 개념, Data 형 메모리 안의 바이트가 저장될 수 있는 `바이트 버퍼` `바이트 버퍼`: 운영체제의 커널이 관리하는 시스템 메모리를 직접 사용할 수 있기 때문에 데이터의 저장, 로드가 가능 swift는 URLSession으로 dataTask를 만들어, 네트워크 호출을 하면 응답으로 Data형을 받는데, 이는 저장, 로드, 변환이 쉽기 때문에 Data로 받는 것 자주 사용되는 것은 json데이터를 struct형으로 변경하거나, 반대로 struct형에서 json으로 변경할 때 먼저 `Data`형으로 변경한 다음 원하는 데이터형으로 변경하여 사용 ex) UserDefaults에 struct 자료형을 Encoder, Decoder를 이용하여 저장하는 방법: https://ios-development.ti..
struct와 class 중에서 어떤 것을 사용할지 정하는 기준 상속이 필요하지 않고 모델이 크지 않으면 struct 사용 json파싱할 경우 struct사용 serialize해서 전송하거나 파일로 저장할 일이 있다면 class사용 Obj-C에서도 사용하려면 class사용 * serialize: 객체를 직렬화 하여, 전송 가능한 파일 형태로 만드는 것 struct call-by-value: closure에 의해 capture되는 경우도, reference copy stack memory할당(빠른 속도) scope base lifetime: 컴파일 타임에 complier가 언제 메모리를 할당/해제할지 알고 있음 data locality: 캐시 히트율이 높음 Codable 프로토콜을 통해 JSON ..
https://ios-development.tistory.com/114 1. 기본 용어 1) View Hierachy - view들 사이의 계층 관계가 존재 - Superview : 뷰의 계층 구조상 다른 뷰를 포함(가장 뒤에 있는 뷰) - Subview : Superview에 포함된 뷰(가장 앞에 있는 뷰) 2) 뷰의 구성 - Root View(Contentes View) : 뷰 계층 구조 최상위에는 항상 하나의 뷰가 존재 3) Container View Controller (contents view controller가 아닌, 컨트롤러들의 연결관계를 도와주는 역할) - 자식 뷰 컨트롤러 : 컨테이너 뷰 컨트롤러의 제어하에 있는 뷰 컨트롤러 - 루트 뷰 컨트롤러 : 컨테이너 뷰 컨트롤러와 직접 연결된 ..