궁금증 노티피케이션을 사용할때 옵저버를 해제하지 않고 해당 클래스가 종료되면(view가 pop, dissmis를 의미) 옵저버도 같이 해제되는걸까? 1view, 2view 에서 Notification center 을 사용할때 2view 에서 옵저버를 해지 하지않을경우 2view가 메모리에서 제대로 해지되지않고 좀비처럼 남아있을수 있다. (자동으로 같이 메모리에서 해제될줄 알았다..) 1view, 2view 에서 1view->2view로 modal present 2view->1view 로 dissmis 하게될경우 1view 의 라이프사이클은 어떻게 되는걸까? 네비게이션과 동일하게 1view 는 viewDidLoad 는 처음 한번만 호출되며 그후 dissmis 로 돌아오게 될 경우 1view 의 viewWi..
tag 사용법 코드로 태그를 부여하는것도 가능하며 storyBoard에서도 가능하다. 위와 같이 label 에 tag 를 달아주는것이 가능! 아래 쪽에 Tag 라고 하는 공간이있으며 기본값은 0 이기때문에 0으로 설정되어있는 모습. tag 를 사용하여 label,button 등 UI컴포넌트에 enum 의 원시값 처럼 Int 값을 넣어 사용할수있다. tag에 들어올수있는 값은 Int(1,2,3...)만 가능하다. 활용예시 각각의 버튼을 하나의 @IBAction 메서드에 연결하여 sender 를 이용하여 활용한 모습이다. @IBAction func touchToOrderJuice(_ sender: UIButton) { switch sender { case ddalBaJuiceOrderButton: makeJ..
UserDefaults 설정해둔 데이터가 저장되어있다면 앱을 껏다 켜도 데이터가 사라지지 않고 남아있어 데이터를 활용할수있다. 간단히 말하면 데이터 저장소 라고 할수있다. 전역에 위치하여 어디서든 데이터를 쉽게 읽고 저장할수있다! 객체를 저장할수도 있다. UserDefaults는 사용자 기본 설정과 같은 단일 데이터 값에 적합하다. 대량의 유사한 데이터 를 저장해야하는 경우에는 sqlite 데이터베이스가 더 적합하다. UserDefaults 사용법 UserDefaults 는 [key: Value] 로 데이터를 저장하는데 이때 key 값은 String 이다. UserDefaults 를 이용해 값을 저장할때는 set메서드를 이용한다. UserDefaults 에 값을 저장할때 기존의 key 와 같은 key를 ..
UML swift 는 UML 을통해 100% 표현할수 없다. UML정의 UML: Unified Modeling Language 통합 모델링 언어 UML 은 소프트웨어 공학에서 사용되는 표준화된 범용 모델링 언어이다. UML 은 소프트웨어 집약 시스템의 시각적 모델을 만들기 위한 도안 표기법(클래스 다이어그램)을 포함한다. 개요 모델을 만드는 표준 언어 라고 할수있다. UML은 객체지향 프로그래밍 소프트웨어 를 개발할 때 명세화, 시각화, 문서화 하기 위해 사용할수 있다. UML을 이용해 시스템의 구조적 청사진을 시각화 하는 표준안을 제공할수 있다. 모델 이란 것은 어떤 것을 실제로 만들때 이렇게 만들면 잘 작동할지 미리 검증해 보는 것이며 실제 물건을 만드는 비용보다 비용이 훨씬 적을 경우에 모델을 만들..
참고한 문서 ARC공식문서 제드블로그 ARC 자동 참조 카운팅 (Automatic Reference Counting) swift는 앱의 메모리 사용량을 관리하기 위해 ARC 를 사용한다. ARC 는 클래스 인스턴스가 더이상 사용되지 않을때 자동으로 메모리에서 해제 시켜준다. ARC 는 해당 클래스의 RC(Reference Counting) 를 통해 사용하고있는지 사용되지 않는지 알수있고 이를 통해 자동으로 메모리에서 해제가 가능하게 된다. 클래스의 저장 방식 클래스를 인스턴스화 하게되면 stack 에는 heap 을 가르키는 포인터가 저장된다. 이때 heap 영역을 참조하게 되므로 RC 는 1 이된다. RC 는 heap 영역에 같이 저장된다. RC 를 측정하기 위해 메모리를 조금더 사용한다고 할수 있겠다...
참고한 문서 공식문서 클로저 개발자 소들이 블로그 Closure 클로저란 익명 함수 즉 기존 사용하던 함수들도 클로저에 속한다. 클로저 > 함수 (클로저가 더 큰 개념이다! 함수가 클로저의 부분 집합!) 그치만 편의상 클로저라고 말하는것은 여기서 이름없는 함수 를 뜻하게된다. 이름 없는 함수라고도 할수 있으며 코드의 블럭 이라고도 표현할수 있겠다. Swift에서는 함수 패러다임 언어이기 때문에 함수는 1급 객체 이다. 그런고로 클로저도 1급 객체다! 상수나 변수에 대입하는것도 가능하며 함수의 타입에 따라 파라미터로 사용할수도 있다. Closure 표현식 이름 없는 함수 이기때문에 func 키워드를 작성하지 않으며 클로저는 Head, Body 로 이루어져 있다. { (parameters)->return T..
stack-view 스택뷰 를 이해하기 위해 알고있어야 하는 개념들 compression Resistance (줄어들지 않으려고 버티는 힘) Content hugging (늘어나지 않으려고 버티는 힘) 스택뷰의 개념들 axis 가로(vertical), 세로(Horizontal) distribution 스택뷰 내부의 요소들을 어떻게 분배할것인지 설정할수 있다. alignment 위치에 대한 설정(정렬) spacing 사이의 간격 Stack-View Properties distribution: UIStackView.Distribution 스택뷰 내부의 요소들을 어떻게 분배할것인지 설정할수 있다. .fill 내부의 요소 뷰들을 최대한 늘릴것이다. 어떤애가 얼만큼 늘어날것인지 고민이 필요하다. .fillEqua..
Programmatically Creating Constraints 오토레이아웃의 조건 들을 코드로 작성해보자! 위의 조건들을 코드로 작성할수 있도록 해보자! 버튼은 safeArea 에서 좌우 20 포인트만큼 떨어져있다. 버튼의 y축은 superView에서 최소 20 만큼 떨어져있다.(우선도 높음) 버튼의 y축은 safeArea에서 0 만큼 떨어져있다.(우선도 중간) Layout Anchors(레이아웃 앵커) 가장 간단하고 안전한 방법중 하나이다. 코드가 간결해진다. 오류체크가 간편하다. class AnchorViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let button = UIButton() b..