Swift
-
[Swift] addObserver를 한 뒤 remove를 해주어야 하는가?앱등이에게 살충제를 뿌린다./Swift 2022. 9. 18. 02:46
https://developer.apple.com/documentation/foundation/notificationcenter/1413994-removeobserver 위 문서에 따르면 iOS9.0 이후에는 observer를 unregister하지 않아도 된다고 한다. If your app targets iOS 9.0 and later or macOS 10.11 and later, and you used [addObserver(_:selector:name:object:)], you do not need to unregister the observer. If you forget or are unable to remove the observer, the system cleans up the next tim..
-
Lock, thread safe in Swift앱등이에게 살충제를 뿌린다./iOS 2022. 5. 24. 01:12
Originated from: https://swiftrocks.com/thread-safety-in-swift Thread Safety in Swift Concurrency is the entry point for the most complicated and bizarre bugs a programmer will ever experience. In this article, I'll share my favorite methods of ensuring thread-safety, as well as analyzing the performance of the different mechanisms. swiftrocks.com Thread Safety in Swift Concurrency는 많은 개발자들이 겪는 ..
-
WWDC2020 - Unsafe Swift앱등이에게 살충제를 뿌린다./Swift 2021. 5. 14. 18:41
Unsafe Swift Swift에서 제공하는 많은 타입, 프로토콜, 프로퍼티등 그 중 Unsafe라는 접두어를 가진 것들이 있다. 무엇이 다른 것일까? 수행하는 기능, 인터페이스에서 큰 차이점을 가지지는 않는다. Invalid Input을 처리하는 과정에서 차이점을 가진다. 대부분의 Operator가 Input을 완전히 Validation한다. (Swift가 Safe한 Programming Language인 이유) 그래서 우리는 쉽게 에러를 리포트받고 수정할 수 있다. Example Optional을 예로 들어보자. let value: Int? = nil print(value!) // Fatal error: Unexpectedly found nil while unwrapping an Optional v..
-
Swiftlint를 통해서 프로젝트에서 느낌표(!)를 제거해보자앱등이에게 살충제를 뿌린다./Swift 2019. 12. 19. 20:04
간혹 발생하는 크래쉬의 원인. Implicitly unwrapped optional 값이 셋팅 된 뒤로 nil이 될 가능성이 없는 optional이라고 간주되어 !를 붙여주지만,크래쉬로 뒤통수를 친다. 그러면 swiftlint를 통해서 이 느낌표를 제거해보자. .swiftlint.yml파일에서 아래 항목을 추가해주자. opt_in_rules: - implicitly_unwrapped_optional 그러면 우리가 선언한 모든 느낌표에 warning이 발생한다. 하지만 스토리보드에 연결된 @IBOutlet 프로퍼티에는 warning이 발생하지 않는다.얘네들까지 전부 warning을 발생시켜 수정하려면 아래와 같이 lint 옵션을 수정해주면 된다. implicitly_unwrapped_optional: mo..
-
[CoreAnimation] Ch16. Replicating Animations (CAReplicatorLayer를 복제하여 애니메이션하기)Ray Wenderlich/Core Animation 2018. 9. 18. 01:06
16장 Replicating Animations Intro CAReplicatorLayer에 대해서 알아본다. (superclass: CALayer) 레이어를 복제할 수 있다. 근데 왜 복제해야해? 라는 질문 단순히 보이는 것만 복제하는 것이 아니다. 복제하는 과정에서 레이어간 약간의 차이점을 발생시켜, 엄청난 효과를 가져올 수 있다. 그리고 무엇보다, 복제한 레이어의 애니메이션마다 차등 delay를 줄 수 있다. Ex) 0.2의 delay를 준다고 가정하면 layer1은 0.2초 뒤, layer2는 0.4초 뒤, layer3은 0.6초 뒤. 애니메이션 시작 이번 챕터는 1. Iris(Siri 짭퉁)가 말하는 음성 신호를 시각적 애니메이션으로 표현 2. 사용자가 입력하는 음성의 크기에 따른 시각적 애니메..
-
[GCD] DispatchQueue.. main큐와 gloabal큐? sync와 asnyc? 궁금증 해결해보자.앱등이에게 살충제를 뿌린다./Swift 2018. 9. 4. 16:22
많은 언어에서 제공하는 비동기 처리 방식.Swift(또는 objc)에는 GCD가 있다. iOS개발을 하다보면, 아래 코드를 많이 보고, 또 사용할 수 밖에 없다.DispatchQueue.main.async {//...} 구글에 GCD를 쳐보면 무수히 많은 정리문서가 존재한다. (심지어 한글로 포스팅한 글도 엄청 많음)그래서 난 나만의 정리를..위해서 포스트를 작성한다. 아래 코드의 결과를 정확히 예측할 수 있다면, 학습이 되었다고 판단하겠다. UIViewController의 viewDidLoad()에서 작성한 코드니까, 아래 코드는 메인스레드에서 작동한다는 전제가 있다. override func viewDidLoad() { super.viewDidLoad() DispatchQueue.global().sy..
-
[CoreAnimation] Ch14. Gradient Animation (그라데이션 애니메이션)Ray Wenderlich/Core Animation 2018. 9. 1. 18:16
Intro 예전 iOS의 락스크린에 있는 밀어서 잠금해제를 떠올려보자. 텍스트 위로 그라데이션 컬러가 애니메이션 된다. Drawing your first gradient CAGradientLayer를 사용 startPoint, endPoint: 그라데이션의 방향을 지정한다. colors: 그라데이션에 필요한 색상. 여러 색을 지정할 수 있다. locations: 그라데이션이 될 위치를 지정함 Animating gradients CAGradientLayer는 CALayer의 서브클래스. 애니메이션 가능한 프로퍼티는 아래와 같다. - colors - locations - startPoint, endPoint let gradientAnimation = CABasicAnimation(keyPath: "locat..
-
[CoreAnimation] Ch13. Shaped and MasksRay Wenderlich/Core Animation 2018. 9. 1. 18:10
13장 Shaped and Masks Intro CAShapeLayer - 다양한 곡선(CGPath)을 그릴 수 있다. 베지어 곡선(UIBezierPath)을 이용하여 cgPath프로퍼티에 넣어주면 곡선을 그릴 수 있다. 그릴 곡선을 정했다면 아래 프로퍼티를 수정하여 데코를 할 수 있음 - path - fillColor - lineDashPhase - lineWidth Finishing up the avatar view Creating the bounce-off animation 두 아바타뷰가 만났다 멀어졌다 하는 애니메이션 구현 (특별할 것 없음) Morphing shapes 두 아바타뷰가 만났을 때 찌그러지는 효과를 내서 더 생동감있게 표현 cgPath를 구하기 위해 UIBezierPath를 사용하면..