본문 바로가기

전체 글

(99)
[Swift] Swift 버전에 대해.. (+Xcode) 프로젝트를 시작하면서 iOS개발엔 당연히 Swift쓰지라고 생각했었습니다. Swift도 버젼이 1, 2, 3, 4, 5 현재에 이르러서는 5.4 버젼입니다. Swift 5는 Xcode 10.2 버젼에서 정식으로 릴리즈 되었습니다. 프로젝트를 진행할 때 Swift 5를 써야하는 이유가 뭘까 4를 쓰면안될까 최신 버전은 안될까 ? 생각을 하다가. 공식 다큐먼트에 모든 정보가 있습니다.. ㅎ swift.org/blog/ Swift.org Swift is a general-purpose programming language built using a modern approach to safety, performance, and software design patterns. swift.org 근본이 최고시다. de..
[iOS] SwiftLint 사용 프로젝트를 하기 앞서 모든 팀원들의 코딩 컨벤션 통일을 위해 SwiftLint 사용을 하기로 했습니다. SwiftLint은 코드를 작성할 때 추천하는 코딩 스타일, 괜찮은 사례등을 모아 놓은 가이드라인 및 규칙들 입니다. 모든 파일들이 Swift 코드가 일관성을 유지하도록하면 새로운 개발자가 합류하거나 예전 코드를 읽을 때 도움이 되며 모든 코드가 일관적으로 보이기 때문에 신경이 분산되지 않습니다. 또한 팀들간의 코드도 팀에 새로 합류한 팀원들도 일관적으로 코드를 짤 수 있습니다. SwiftLint를 실행 시켜 보자!! 1. pod init 2. Podfile에 pod 'SwiftLint' 추가!! -> pod install 3. Targets의 Build Phases에 Run Script를 추가하고 스..
[iOS] 키보드에 맞게 view 수정, NotificationCenter, UIResponder iOS 개발을 하다보면 텍스트 필드를 누르고 키보드창이 올라와서 텍스트 필드의 내용을 확인을 못할 때가 있습니다. 그래서 일단 예시로!! 극단적으로 텍스트 필드를 하단에 둬봤습니다.. 내 텍스트필드 어디갔어.... 생각.. 일단 생각하기로 - 일단 텍스트 뷰를 누르고 키보드가 올라올 때 뷰도 같이 올려줘야하고 - 키보드를 endEditing이나 resignFirstrespond메서드로 내렸을때도 내려줘야 합니다. 텍스트 필드를 눌렸을 때 키보드가 올라오는 기능은 iOS 자체 기능이기 때문에 방법이 있을거라 생각합니다. delegate 같은 걸 쓰나?!?! 어떻게 하냐!! NotificationCenter 사용!! 예약된 옵저버들에게 정보를 broadcast 가능하게 해주는 알림 발송 메카니즘이다. add..
[iOS] DispatchGroup, DispatchItem, DispatchSemaphore Dispatch Group의 목적!!!! 여러 스레드로 분배된 작업들이 끝나는 시점을 그룹지어서 한번에 파악하고 싶을 때 Dispatch Group의 사용됩니다. (예를 들어 셀의 모든 이미지가 다운로드 된 뒤에 특정 행동을 해야할 때) 사용방법 1. notify() 사용! 출력은?!?! . . . 2초 후 이렇게 두개의 task가 다 끝났을 때 notify()를 통해 알 수 있습니다.! let group = DispatchGroup()으로 만들 수 있음 2. group.wait() 사용 wait를 쓰면 2개가 다 끝날 때 까지 멈춰있기 때문에 잘못쓰면 데드락 발생합니다. 안쓰는게 나아보이는데??!?!?!?! 최대한 notifify를 쓰는게 나은 것 같습니다. (+wait에 시간 파리미터를 줘서 그 시간..
[iOS] Dispatch Queue 종류 Dispatch Queue 종류 main queue, global queue, custom queue 세 종류의 queue가 있습니다. ㅎ 1. main queue - main queue는 serial 합니다. - 오직 하나만 존재!! 우리가 쓰는 main thread에서 처리!! UI업데이트를 주로한다. - main queue로 보내면 무조건 메인 스레드로만 보내고 메인 스레드는 오직 한개 뿐 - main queue는 main thread로만 task를 보내기 때문에 무조건 serial입니다. (ㅋㅋ 당연한말) 2. global queue - global queue는 concurrent 합니다. - concurrent 특성을 가진 queue입니다. - QoS(Quality Of Service)를 가지며..
[iOS]동시성 프로그래밍, GCD, 동기, 비동기, 직렬성 동시성 프로그래밍 concurrency - 다수의 스레드에 적절히 일을 분배 시켜서 동장 하도록 하는 프로그래밍 주로 iOS에서는 메인 스레드로 UI를 그리는 작업을 하고 이미지를 다운로드 받아오는 등 큰 데이터를 쓰는 작업은 비동기로 다른 스레드에서 처리하게 됩니다. 이렇게 여러 스레드를 사용해서 iOS에서는 동시성 프로그래밍이 가능합니다. 다른 스레드로 task를 보내기전 선입선출을 하는 queue에 task를 저장합니다. 그리고 이 queue에서 여러개의 다른 스레드로 task를 보내어 처리를 해줍니다. 이렇게 queue에 있는 task들을 여러 스레드로 분산처리 해주는 것이 바로 GCD입니다. GCD (Grand Central Dispatch) queue에 넣은 작업을 GCD가 스레드를 적절히 생..
[iOS] updateCycle updateCycle이란?! run loop에서 updateCycle은 view 들을 배치하고 다시 그리는 역할을 합니다. Update Cycle은 애플리케이션이 유저로부터 이벤트 핸들링 코드를 수행하고 다시 main run loop로 컨트롤을 반환하는 지점입니다. 하는 일은?! - View들을 배치하고(layout), Layout은 화면에서 UIView의 위치와 크기를 의미합니다. 모든 View는 frame을 갖고 있고 이는 부모 뷰와의 상대적 거리도 나타낸다. - 보여주고(display) Layout이 뷰의 위치나 크기를 의미한다면 Display는 View의 속성들 중 크기와 위치 자식 View들에 대한 정보를 포함합니다. 색, 텍스트, 이미지, Core Graphics 등이 있습니다. - 제약한다(..
[iOS] RunLoop 최근 레이아웃 애니메이션을 공부하다가 update cycle이 RunLoop안에 있다고 해서 RunLoop가 뭔지 공부해봅시다. Developer Documentation에 뜨는군요! 입력 소스들을 관리하는 객체들에 대한 프로그래밍 인터페이스입니다. 개요 RunLoop는 윈도우의 키보드, 마우스처리와 같은 소스를 입력받아 처리하는 오브젝트입니다. 또한 Timer events도 처리합니다. MainThread에서는 자동으로 만들어지나 프로그래머가 만든 Thread에서는 직접 관리해줘야 합니다. Timer는 인풋은 아니지만 특별히 관리합니다. + current() 메서드로 불러서 쓸 수 있습니다.. 경고 스레드 세이프하지 않다. current 메서드를 이용해서만 쓰세요! 다른 스레드에서 쓰면 원치않은 결과를..