콘텐츠로 건너뛰기
Home » Development » 페이지 48

Development

프로그래밍 언어 및 환경

[iOS] 코어그래픽에 손대기

코어그래픽은 뷰에 그림을 그리는 기술이다. 하지만 C로 짜여진 API에 온갖 혼란스러운 함수명하며, 컨텍스트와 같은 어려운 개념들이 들어가면서 나와 같은 초보자에게는 마치 ‘넘을 수 없는’ 장벽과 같이 느껴진다. 하지만 많은, 정말 많은 튜토리얼들이 코어그래픽을 사용해서 그림을 그리는 이유는 명확하다. 바로 “아주 빠르기” 때문이다. 코어 그래픽은 그래픽 메모리의 버퍼를 직접 다루므로 아주 빠르다. (다만 일부 기기에서는 느리기도 하더라 ㅠㅠ) 오늘은 “시작하는 마음가짐”으로 코어 그래픽에 대해 잠깐 살펴보도록 하자.
코어그래픽을 사용하는데는 ‘컨텍스트’라는 개념을 이해해야 하는데, 이는 뒤에서 설명하기로 하고 잠시동안 ‘컨텍스트’는 그림을 그리는 도화지, 혹은 포토샵에서의 레이어와 같다고 간주하자.
더 보기 »[iOS] 코어그래픽에 손대기

[iOS/OSX] predicate를 사용한 배열의 필터

배열을 필터하기 특정한 값을 만족하는 원소만을 추출하여 부분 집합을 구하는 작업을 종종 해야 할 때가 있다. 배열에 대한 정렬 보다 간단하다면 간단하고 어렵다면 어려운데, predicate를 사용하면 쉽게 추출이 가능한데, 이 predicate를 사용하는 문법이 별도로 존재하기 때문에 조금 성가실 수 있다. (하지만 영문법과 크게 다르지 않다) NSMutaleArray *array = [NSMutableArray arrayWithObjects:@”Bill”, @”Ben”, @”Chris”, @”Melisa”, nil]; NSPredicate *bPredicate = [NSPredicate predicateWithFormat:@”SELF beginsWith:’b'”]; NSArray *beginWithB = [array filteredArrayUsingPredicate:bPredicate]; // ==> { @”Bill”, @”Ben” } predicate는 너무 깊이 파면 복잡하므로 일종의 쿼리문이며, 대략 다음과… 더 보기 »[iOS/OSX] predicate를 사용한 배열의 필터

[iOS_OSX] 배열을 정렬하기

배열을 정렬하기

배열을 정렬하는 거 언젠가는 써 먹겠지 싶어서 정리.
생각보다 자주 써먹게 되더라

배열을 정리하는 방식은 크게 세 가지로 1)디스크립터를 사용하거나 2)블럭, 3)셀렉터를 사용하는 방법이 있다. 각각이 표현의(?) 차이는 있는데 실제로는 각 요소들을 비교하여 어떤 것이 앞에 오는지를 비교하여 정렬하게 된다.더 보기 »[iOS_OSX] 배열을 정렬하기

키밸류 옵저빙이란

키밸류 옵저빙 키밸류코딩(KVC)에 이어서 키밸류 옵저빙에 대해 이야기해보자. 키밸류 코딩에 관한 포스팅에서 키밸류 코딩은 키밸류 옵저빙의 근간이 되는, 어떤 객체의 프로퍼티를 키 이름으로 런타임에 동적으로 탐색하여 액세스할 수 있게하는 기술이라고 하였다. 키밸류 옵저빙 역시 프로퍼티 액세스와 관련한 Objective-C 런타임이 제공하는 동적 기능의 일종으로, 특정한 키에 대한 객체의 프로퍼티 값이 변경될 때, 해당 변경에 대한 알림이 다른 객체로 통지되는 것을 말한다. 예를 들어 foo 라는 객체 인스턴스에 a 라는 프로퍼티가 있고, bar 라는 객체가 이 프로퍼티에 대한 옵저버로 등록이 되어 있다면,… 더 보기 »키밸류 옵저빙이란

Pages: 1 2 3

(Cocoa) 날짜와 시간을 다루기

updated

Swift를 사용해서 Date를 다루는 방법은 새로 작성된 글을 참고하세요.
 

들어가며

날짜와 시간을 위한 프로그래밍을 위해서는 기본적으로 NSDate를 사용한다. NSDate는 2001년 1월 1일 자정을 기점으로 현재시간 (혹은 특정 시점)까지의 초단위로 경과한 시간을 저장하고 있는 객체이다.(Epoch가 아니라 21세기의 시작시점을 기준으로 하고 있다!) 이렇게 단순히 누적된 초 시간으로는 두 시점의 선/후 관계를 파악하는 등의 단순 비교 작업은 가능하지만, 구체적인 날짜나 요일에 연관된 작업을 하기는 매우 어렵다. 예를 들어 올해 크리스마스가 무슨 요일인지를 구하는 일은 NSDate 객체 만으로는 사실상 매우 힘들다.
더 보기 »(Cocoa) 날짜와 시간을 다루기

[OSX] 메인 윈도우 컨트롤러를 앱델리게이트에서 분리하기

iOS 앱의 경우에는 UIApplication 객체가 생성되면 해당 앱의 델리게이트가 런칭 직후의 일을 처리한다. 이 때 앱의 윈도우가 처음으로 표시할 초기 뷰 컨트롤러의 뷰를 윈도우에 보여주게 된다. 그 이후부터는 화면 단위로 각 뷰의 뷰 컨트롤러 및 여러 MVC의 컨트롤러와 여러가지 디자인패턴을 통해 상호작용하면서 앱을 구성하면 된다. 이에 비해 맥용 앱을 Xcode로 작성하고자 하면 이 “메인 컨트롤러”가 다름 아닌 앱 델리게이트 객체라는 점에서 좀 의아하게 생각된다. 즉, 메인 윈도우에 대해서는 별도의 컨트롤러가, 만약 또 다른 윈도를 생성한다면, 역시나 해당 윈도에 대해서는 별도의… 더 보기 »[OSX] 메인 윈도우 컨트롤러를 앱델리게이트에서 분리하기

[Objective-C] 키밸류 코딩

객체는 그 내부에 어떤 값을 저장하고, 접근자(accessor)라 불리는 메소드를 통해서 이 값에 접근한다. Objective-C에서는 내부 변수(ivar라 한다)와 그에 대한 접근자 메소드를 합쳐서 “프로퍼티”라는 개념으로 다룬다. 이 때 프로퍼티의 이름을 나타내는 문자열을 키(key)로 하여 그 값에 액세스하는 것을 키-밸류 코딩이라고 한다. 즉, 어떤 객체 내부의 값에 접근하려 할 때, 접근자 메소드를 호출하는 것이 아니라, 그 프로퍼티의 이름을 나타내는 문자열값을 사용하여 객체의 프로퍼티 값을 간접적으로 읽거나 쓰는 것을 말한다. 키밸류 코딩은 코코아에서 제공하는 여러 가지 기술을 사용하기 위한 전제 조건이기도 하다. 따라서… 더 보기 »[Objective-C] 키밸류 코딩

[iOS/OSX] 앱 로컬라이징 하기

nib 파일 로컬라이징 nib 파일을 선택하고 인터페이습 빌더에서 언어를 추가하면 해당 언어로 표시할 nib 파일이 복사된다. 이에 따라 버튼 레이블이나 뷰에 올라가는 이미지와 텍스트를 변경하면 기기에서 설정한 언어에 따라 자동으로 해당 언어의 nib 파일이 선택되어 로컬라이징된 UI를 보여주게 된다. 문자열 테이블 예를 들어 경고창이나 검색 결과 문구에 대해서는 문자열 테이블을 사용하여 로컬라이징한다. 문자열테이블은 .strings 라는 확장자를 가지고 있다. 예를 들어 코코아 앱에서 찾기 패널을 만들었다고 한다면 Find.strings 파일을 각 언어별로 만들어 둘 수 있다. 문자열 테이블은 키-값 쌍의 모음이다. 각각의… 더 보기 »[iOS/OSX] 앱 로컬라이징 하기

[iOS/OSX] Timer 사용하기

특정한 시간 이후에 작업을 시행하는 타이머를 사용하는 방법에는 몇 가지 방법이 있을 수 있는데, 코코아에서 타이머는 NSTimer 객체를 통해 구현된다. 타이머와 런루프 타이머는 런루프(Run Loop)와 밀접한 관련을 맺고 있다. 타이머는 스스로 동작기한을 가지고 있고, 그 상태로 런루프에 등록된다. 런루프는 그 기한이 지나는 시점에 타이머를 지켜보고 있다가, 타이머가 실행하기로 한 액션을 지정된 객체로 보내게 된다. 런루프는 (역시나 런루프와 스레드를 혼동하는 불편한 진실 때문에 이에 대한 별도의 포스팅도 필요할 듯) 사용자의 입력 등에 적절히 반응하기 위해서 계속해서 “기다리는” 일종의 루프이다. 예를 들면… 더 보기 »[iOS/OSX] Timer 사용하기