태그 보관물: Objective-C

Objective-C :: 임의의 데이터 타입을 NSData로 인코딩하기

NSValue NSData 변환

NSValueNSData로 변환하는 방법에 대해 생각해보자. 코어데이터 등에서 표준으로 지원하는 타입이 아닌 경우, NSData를 이용해서 이진데이터로 저장하는 방법이 있는데, 예를 들어서 NSRange(이건 C구조체이다.)를 이진데이터로 바꾸는 것은 다음과 같이 하면 된다.

NSRange r = NSMakeRange(0, 10);
NSValue* v = [NSValue valueWithRange:r];
NSData* d1 = [NSKeyedArchiver archivedDataWithRootObject:v];

구조체나 스칼라값 타입은 NSValue로 감싼 다음 이진데이터로 직렬화할 수 있다. NSValue 역시 NSCoding 프로토콜을 따르므로 위와 같이 처리하면 되는데…. 계속 읽기

블럭의 변수 캡쳐링

블럭 내 변수 캡쳐링

C의 코드블럭은 사실상 여타 프로그래밍 언어의 클로저개념1과 거의 동일하다.

블럭 내부에서는 다음의 변수들을 사용할 수 있다.

  1. 전역변수와 정적변수는 블럭내에서 액세스 가능하다.
  2. 블럭 내로 전달된 파라미터는 블럭 내부로 복사되며 지역변수처럼 액세스한다.
  3. 블럭을 감싼 영역의 스택 변수는 블럭 내에서 액세스 가능하되 상수로 취급한다.
  4. 블럭을 감싼 영역에서 __block 변경자와 함께 선언된 변수는 참조로 전달되며, 블럭내에서 변경 가능하다.
  5. 블럭 내에서 선언된 지역 변수는 함수의 지역변수와 동일하게 동작한다. 액세스 가능하며, 블럭의 스코프가 끝날 때 파괴된다.

계속 읽기