티스토리 뷰

 

1. int는 C에서 왔고, primitive data type(원시 데이터 타입) 최대 값이 있는 숫자를 담을 변수에 보통 사용된다.
 
2. NSInteger는 현재 사용하고 있는 아키텍처(플랫폼)에 맞게 사이즈가 자동으로 설정되는 애플의 Foundation 프레임워크에 있는 특별한 primitive data type이다. NSInteger는 실제로 int를 재정의하고 있다.
 
3. 숫자를 표현하기 위해 사용하는 세 번째 방식은 Foundation 프레임워크의 NSNumber 클래스 인스턴스를 생성하는 것이다.
 

 

 

 

 
int와 NSInteger는 둘 다 객체(Object)가 아니다.
 
"객체가 아니다" 의 의미
  • 미리 정의된 사이즈가 있기 때문에 동적 메모리 할당에 대해 걱정할 필요가 없다.
  • 힙이 아닌 스택에 생성되므로 변수의 값에 접근하기 위해서 포인터가 필요없다.
 
이와 유사한 데이터 타입으로 int, NSInteger, CGFloat, CGPoint, CGRect(Foundation Data Types Reference) 등이 있다.

객체가 아니다. 그러므로 포인터가 필요없다.

 

 

 

 

 
NSInteger <-> NSNumber 
NSNumber *num1 = [NSNumber numberWithInt:10];
NSInteger num2 = [num1 integerValue];
 

 

 
 
NSNumber
 
NSNumber *year = [NSNumber numberWithInt:2011];
NSNumber의 인스턴스를 생성하는데, + alloc과 -init 메소드가 없다.
convenient class methods 를 사용했다.
이 방식의 장점은 생성된 객체의 메모리 관리를 직접 할 필요가 없다는 점이다.
생성된 객체를 사용하고 나서 나중에 -release 메시지를 보내지 않아도 된다.
 
아래 경우에는 직접 메모리 관리를 해야 한다.
NSNumber *year = [[NSNumber alloc] initWithInt:2011];

 

 

 

 

 
왜 직접 int 또는 NSInteger를 사용하지 않고 NSNumber를 사용할까?
이유는 바로 객체를 만드는 데 꼭 다른 객체를 사용하는 몇몇의 Cocoa 클래스들이 있기 때문이다.
이들은 primitive type들은 사용할 수 없다.
 
예를 들어, NSArray가 대표적인 경우이다. NSArray는 다른 객체들로 구성된 컬렉션(collection)을 관리하는 객체이다.
만약 숫자의 목록을 NSArray를 이용하여 관리하고자 한다면 NSNumber 객체를 사용해야만 한다.
 
NSArray 에 내장된 유용한 많은 기능을 사용하기 위해 
int 와 NSInteger 를 담을 수 있는 C 배열을 사용하지 않는다 

 

 

 

'iOS 개발 > iOS' 카테고리의 다른 글

iPhone 초기화, Simulator Path, Sandbox 추출  (0) 2016.07.24
UIView LifeCycle  (0) 2016.07.24
ViewController LifeCycle  (0) 2016.07.24
Application LifeCycle  (0) 2016.07.24
UIResponder  (0) 2016.07.24
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함