전체보기 238

[iOS] UIViewController 심층 분석

View Controller View controller는 앱의 UI를 꾸미는 view들을 관리한다. 개발할 기능과 시각적 요소를 제공하기 위해서 view controller를 상속받아 클래스를 구현한다. view controller는 관리하고 있는 view들과 엮여 있으며 event를 처리하기 위한 Responder chain에 관여한다. view controller는 UIResponder 객체로서, 해당 view controller의 root view와 super view 사이의 Responder chain에 위치한다. view controller의 view가 event를 처리하지 않는다면 해당 event를 super view로 넘길 수 있다. 그리고 다른 view controller를 contain..

[FunFun study] 함수형 프로그래밍 스터디

FunFun study - Functional Programming을 배우는 스터디개요 : 언어에 상관없이 자신이 자신있는 언어를 택하여 함수형 프로그래밍을 연구/경험사용 언어 : Haskel, Scala, Kotlin, Swift, Javascript 등 스터디 : https://github.com/funfunStudy/study알고리즘 풀이 : https://github.com/funfunStudy/algorithm페이스북 페이지 : https://www.facebook.com/groups/1189616354467814/

[iOS] addSubview & addChildViewController (P. S. Container View Controller)

addSubview & addChildViewController addSubview는 view를 view hierarcky에 추가한다. addChildViewController는 Container View Controller에 child view controller를 추가한다. 전자의 경우, 하나의 view controller에서 event를 관리한다. 후자의 경우, 각각의 view controller들이 자신이 소유하고 있는 view의 event를 따로 관리하게 된다. 그리고 각 child view controller를 소유하고 있는 view controller를 container view controller라고 한다. 우리가 가장 흔하게 볼 수 있는 container view controller의 예..

[iOS] Autorelease Pool과 메모리 관리

Autorelease pool은 객체가 즉시 해제되는 가능성을 피하고자 할 때, 객체에 대한 소유권을 포기하도록 하는 메카니즘이다. autorelease pool은 '@autoreleasepool'이라는 키워드로 사용한다. 블록안 에서 autorelease 메시지를 받은 객체들은 '@autoreleasepool'로 선언한 블록의 끝에서 release 메시지를 받는다. 일반적으로 autorelease 메시지는 객체를 할당한 구역 밖에서 객체를 해제하고자 할때, 컴파일러에게 이를 알리고자 사용하는 메시지이다. 하지만 autorelease 메시지는 객체가 언제 해제되는지 불명확해 진다. autorelease pool은 이런 autorelease 객체가 해제되는 시점을 명시적으로 보여준다. 즉 autorelea..

[Programming] 함수형 프로그래밍에 대하여

향후 함수형 프로그래밍에 대한 이해는 이 포스팅에 작성합니다. FP in all languagesFP in Swift 함수형 프로그래밍에서 고차함수나 재귀를 자주 쓰는 이유 : 함수형 프로그래밍은 외부의 영향을 받지 않는 순수함수 사용을 지향한다. 이유는 순수함수 여야만 분산 프로그래밍 시스템에서 데이터의 신뢰성을 보장 하는 함수형 프로그래밍의 가치를 살릴 수 있기 때문이다. 그래서 반복문을 사용할 때, for, while 같은 loop문을 사용하는 것 보단 외부에서 가져온 변수를 스택에 저장하고 이를 참조하는 재귀함수를 쓴다. 이는 스택 영역에 복사된 데이터를 참조하기 때문에 외부 변수나 State에 의해 데이터 신뢰성이 파괴 되는 행위를 방지할 수 있다. 중간 변수를 캐시하는 방법 : 재귀를 사용하여..

Programming 2017.07.04

[iOS] Visually Rich User Experiences

UI 시스템UIKit/ AppKit : 기본 UI를 제공해주는 framework로 cocoa/ cocoa touch의 주요 자원이 됩니다. 커스터마이징을 통하여 새로운 감각을 지닌 UI로 바꿀 수도 있습니다.CoreAnimation : 각 UI의 움직임 모션 등을 CALayer를 통해 구현할 수 있습니다.CoreGraphics : 이미지를 생성할 때, 사용하는 API입니다. CoreGraphics을 이용한 드로잉 작업은 런타임에서 수행하게 됩니다. iOS 10에서 소개된 UIGraphicsImageRenderer를 사용하면, CoreGraphics를 사용하는 것보다 편하게 이미지를 그릴 수 있습니다. renderer 객체에 image 생성 부분에 클로저를 통하여 이미지를 그리고 반환하면 됩니다.CoreI..

WWDC/2017 2017.06.21

[iOS] Advanced Animation with UIKit

추후, sample code 및 추가 주석 필요 UIViewPropertyAnimator를 사용해서 사용자의 제스처와 유기적인 애니메이션 구현이 가능합니다. UIViewPropertyAnimator는 작년 (2016)에 발표된 API 입니다. 타이밍 펑션을 지원하여 베지어 곡선을 사용한 animation 커스터마이징이 가능합니다. 그리고 사용자의 인터랙션과 함계 유기적인 animation 동작이 가능합니다. fractionComplete라는 animation 프로퍼티로 사용자의 제스처에 따른 진행 경과를 지정해 줄 수 있습니다. 코드로 구현한 animation의 경우, 사용자의 동작이 끝나는 시점은 가져왔지만 제스처에 의해 미리 진행된 animation의 경과를 가져올 수 없었습니다. 하지만 fracti..

WWDC/2017 2017.06.20

[iOS] Core ML in WWDC 2017

machine learning은 현존하는 기술 중에 가장 인기있는 기술입니다. 사진에 나온 사람의 얼굴 인식, 키보드의 prediction, 워치의 hand writing 인식 등에 ML이 사용되고 있습니다. WWDC에서는 장미를 인식하는 알고리즘을 예로 들었습니다. 먼 ML은 Traning이라는 과정을 거칩니다. 이 과정을 통해 ML 모델이 생성됩니다. 이미지에 대한 정보를 수집하고 꽃의 색과 모양에 따라 꽃을 분류하는 알고리즘을 구체화시켜 나갑니다. 개발제에게는 ML 모델이라는 정형화된 파일을 제공합니다. ML 모델은 함수로 이루어져있고 내부에는 여러 레이어와 Neural network가 이어져 있습니다. ML 모델 내부의 파싱 과정을 거친 결과가 최종적으로 개발자에게 제공합니다. 애플은 이를 제공하..

WWDC/2017 2017.06.20

[iOS] "%zd, %tu, %tx" 아키택처 관련 Data Format

iOS에서 64비트를 사용하면서, 각 데이터 사이즈의 변화가 생겼다. 특히 NSInteger, NSUIntger 등등의 'NS'라는 접두어가 붙는 primitive type의 사이즞 각 아키텍처 별로 다르다. 예를 들어 NSInteger의 경우, 32비트에서 int 타입으로 4 바이트를 가진다. 반면 64비트에서는 long 타입으로 처리되어 8바이트가 된다. print (NSLog) 문을 통하여 출력을 할때, 데이터의 사이즈가 전달되는데, 이렇게 데이터의 사이즈가 아키텍처별로 다르기 때문에 컴파일을 하다보면 워닝을 발견할 수 있다. 이와 같은 워닝을 방지하기 위해 위의 데이터 포맷이 필요하다. %zd, %tu, %tx는 32/64 비트 아키택처에 맞추어 데이터 사이즈를 전달한다. 단, %zd는 signe..

[RxSwift] Obseravbles

Observable은 Rx에서 중요한 요소이다. Sequence하고도 불리지만 대부분 Obserable이라고 불린다. Observable 3가지 타입의 이벤트를 수용한다. 각 event는 onNext, onComplete, onError이다. 각 event는 아래와 같이 정의된다. onNext아래의 그림에서 각 원으로 표시되는 event로, 각 element마다 발생하는 event이다. onCompleted아래의 그림에서 수직으로 그어진 선이다. observable의 정상적인 종료를 의미한다.onError아래의 그림에서 빨간 'X'이다. observable의 비정상적인 종료를 의미한다. error 객체를 반환한다. observable은 of, just, from 등의 operator들에 의해 생성된다. ..