iOS 7 : UIDynamic의 이해

iOS 7에서 UIKit 에는 UIDynamic이라는 새로운 기술이 도입되었다. 이는 뷰에 대해 강체 물리(rigid-object physics)를 적용한 애니메이션을 구현할 수 있도록 한다. 뷰가 중력의 영향으로 떨어지거나 다른 뷰에 충돌하는 효과를 표현할 수 있다. 이는 이전에는 매우 복잡한 알고리듬을 적용하여 표현할 수 있었으나, UIDynamicItem은 매우 간단히 구현할 수 있다.

iOS 7 : UIDynamic의 이해 더보기

긴 이름의 옵션을 파싱하는 C함수, getopt_long()

긴 이름 옵션 파싱함수

getopt() 함수는 비교적 사용이 쉬운데, 보통 명령행 유틸리티들은 옵션을 보다 명확하게 인지할 수 있는 긴 이름의 옵션들을 지원한다. 예를 들어 출력파일을 결정할 때 -o outfile로 쓰는 대신 --output outfile로 쓰게끔 허용하는 것이다. 이 기능은 getopt_long()이라는 함수를 통해 지원할 수 있다. 긴 이름 옵션은 하나의 문자열에 망라하기 어려우므로 별도의 구조체를 사용하여 옵션 정보를 마련해두고 이 구조체의 배열을 사용하는 방식으로 처리한다. 그러면서 인터페이스는 좀 달라지지만, 사용하는 방식은 거의 유사하다고 보면 된다.

긴 이름의 옵션을 파싱하는 C함수, getopt_long() 더보기

C/C++ : 가변 인수 매크로 함수 구현

va_args in c

예전에 가변 인수를 받는 C 함수를 만드는 법을 간단히 살펴본 적이 있는데, 오늘은 좀 더 자세히 알아보자.

C 언어에서 복수 인자를 받는 함수는 다음과 같이 선언한다.

반환형 함수명(고정인자[, 고정인자] ,....);

최소 1개 이상의 고정인자가 있고, 그 이후에 ...을 써서 추가적인 인자를 더 받는다는 것을 알려준다.

C/C++ : 가변 인수 매크로 함수 구현 더보기

파일로부터 한줄 씩 읽기

파이썬

가장 일반적으로 파일을 한 줄씩 읽어들이는 방법은 다음과 같다.

with open('filename.txt', 'r') as f:
    for line in f:
        pass # line은 읽어들인 각 줄

하지만 이 방법은 파일을 한 번에 메모리로 읽어들인 다음, 한 줄씩 스캔한 결과를 돌려주기 때문에 수 기가짜리 로그 파일을 이런 식으로 처리하면 문제가 생긴다.

파일로부터 한줄 씩 읽기 더보기

[ObjC] 윈도 + GNUStep + Clang 사용시 몇 가지 알아 둘 점

프로퍼티의 backing storage variable을 반드시 명시적으로 선언해야 함

말 그대로, 프로퍼티를 설정할 때 이 값이 담길 인스턴스 변수를 명시적으로 선언해야 한다. 옛날 iOS 관련 책을 보면 그런 식으로 코드가 되어있는데…

@interface Person : NSObject {
    NSString *firstName, *lastName;
}
@property (copy, nonatomic) NSString *firstName;
@property (copy, nonatomic) NSString *lastName;
@property (readonly) NSString *fullName;
@end

iOS4로 넘어오면서 부터인가 변수를 중괄호 안에 선언해 줄 필요가 없어졌다. 이는 Objective-C 런타임이 자동으로 변수를 선언해주기 때문인데, GNUStep의 런타임은 아직 구형이라 변수는 선언해줘야 한다. (컴파일러가 해주는 부분이 아니기 때문에, clang으로 컴파일해도 에러가 난다.)

ARC를 사용할 수 없다.

Clang을 사용하면 ARC에서 사용하는 @autoreleasepool 블럭을 사용할 수 있다. ARC 자체는 clang 컴파일러가 지원하는 것으로 알고 있는데 아마 Apple LLVM에서만 사용가능 한 듯 하다. 실제로 ARC 옵션을 주고 컴파일하려고하면 GNUSTEP을 사용하는 경우 이 런타임에서는 사용할 수 없다고 메시지가 출력된다.

블럭은 사용할 수 있다.

컴파일러가 clang 이라면 -fblocks 옵션을 사용하면 코드블럭을 사용할 수 있다. gcc 4.8.1에서도 왠지 코드 블럭은 동작하지 않는 것 같다. (아니면 옵션이 -fblocks가 아닐수도 있겠다.)