swift(5)
-
NSLock
0. 개발자 문서 확인 먼저 알아보기 전에 NSLock에 관한 설명을 애플의 개발자 문서에서 먼저 찾아보았다. https://developer.apple.com/documentation/foundation/nslock An object that coordinates the operation of multiple threads of execution within the same application. “동일한 어플리케이션 내에서 여러 스레드를 조정하는 객체” 라고 나와 있었다. 1. Thread-Safe를 지키는 방법 Re-entrancy 어떤 함수가 한 스레드에 의해 호출되어 실행 중일 때, 다른 스레드에서 함수가 호출되더라도 올바르게 주어져야함 Thread-local storage 공유 자원을 줄여 각..
2022.05.25 -
defer
Swift를 사용하면서 거의 잘 활용하진 않았지만, 꽤나 흥미롭게 다가와 이 문법을 정리하게 되었다. 0. defer란 무엇인가? 현재 스코프를 벗어날 경우 가장 마지막에 실행이 되는 구문이다. 처음 보면 이해가 잘 가지 않겠지만 예시를 이해하다 보면 생각보다 금방 이해할 수 있다. 1. defer 활용해보기 위와 같이 구성을 한 후 결과를 출력해보았다. 그랬더니 b, a, c 순서대로 출력이 되는 것을 확인 할 수 있었다. 간단하게 설명하자면 defer는 함수의 가장 마지막에 실행이 된다는 것을 보장하는 것이다. 1-1. defer 여러개 쓰기 그렇다면 defer를 여러개로 쓰게 된다면 어떻게 될까? 이렇게 defer를 여러개 쓰게 된다면 2, 1 순서로 출력된다. defer는 스택의 형식으로 사용되며..
2022.05.24 -
CGRect, CGSize, CGPoint에 대하여
최근 UI의 작동방식에 관심이 많아져 다시 기초부터 공부하게 되었습니다. PinLayout과 FlexLayout 같은 외부 서드파티 라이브러리를 활용한 UI에 관심을 가지고 찾아보고 있었는데, 확실히 기존에 사용하던 오토 레이아웃과는 다른 개념이었어요... 이것도 기회가 된다면 나중에 한번 정리를 해보도록 할게요! 로딩 속도가 어마 무시하게 빠른 녀석들입니다 후들후들... https://github.com/layoutBox/PinLayout GitHub - layoutBox/PinLayout: Fast Swift Views layouting without auto layout. No magic, pure code, full control and blazing fast Fast Swift Views lay..
2022.04.28 -
lazy var 정리
이번에 미세먼지 앱을 만들어 보면서 lazy란 개념을 공부했습니다. 기존에 lazy라는 게 있다고 들어는 봤지만, 어떻게 쓰는지도 몰랐고 왜 쓰는지도 몰랐어요. 하지만 이번 기회에 왜 쓰는지 정리해보고 싶어서 공부를 시작해보았습니다. lazy는 초기 init시에 초기화되는 것이 아니라 호출될 때 생성이 되면서 메모리에 올라가며 이후 같은 변수를 사용 시 다시 초기화가 진행되지 않고 이전에 생성된 변수를 그대로 사용하더라고요. 또한 클래스나 구조체 내에서만 사용이 가능하다는 특징이 있었습니다. 아래는 예시 코드입니다 class Person { var name: String var age: Int // 초반 init때 생성되지 않음 lazy var info: String = { return "이름 : \(s..
2021.04.13 -
Swift로 미세먼지 앱 만들기
학교 과제로 미세먼지를 보여주는 프로그램을 만들라기에 자신감 있게 iOS를 선택했습니다! 할 줄 아는게 iOS밖에 없어서... 과제도 이왕 만드는김에 제대로 만들어보자라고 생각해서 앱의 장점인 현재 위치를 받아와 주변 측정소의 미세먼지 값을 쓰기로 했어요. 미세먼지 값을 받아오려면 네트워크 통신이 필수적이었고, 현재 위치를 알아내야 했습니다. 그래서 서버와의 통신 전, 서버의 요청값에 보내줄 현재위치를 알아 내기 위해서 CoreLocation을 사용했어요. // lazy로 선언하여 메모리 관리 lazy var locationManager = CLLocationManager().then { // 10미터 이내의 정확도로 설정을 하여 배터리 관리 최적화 $0.desiredAccuracy = kCLLocati..
2021.04.10