목표 C는 C의 연장이기 때문에, C 리터럴 사용하는 곳이 장소에서 일반 리터럴을 사용 등 - 또한
프리미티브 타입 int
, long
값을 제공하는, 즉, 목표 C는 NSNumber
을 지원한다 Cocoa 프레임 워크의 클래스입니다. 이 클래스의 객체는 에 사용됩니다. 컬렉션에 넣는 등 개체가 필요한 용도의 기본 값입니다. 코코아 컬렉션은 기본 유형의 값을 허용하지 않으므로 컬렉션에 숫자 값을 배치하기 전에 객체 래퍼를 제공해야합니다.
목표 C 형 NSNumber
의 리터럴을 만들기위한 지원을하지 않았다, 그래서 당신은 다음과 같이 수동으로 리터럴을 포장하는 데 필요한 :
[NSNumber numberWithInt:4]
이 여러 개의 같은 값을 정의해야 특히, 너무 많이 입력됩니다 컬렉션에 넣기. 이것이 바로 Objective C가 NSNumber
을 생성하기위한 대체 구문을 추가 한 이유입니다. @
기호가있는 것입니다. 따라서 @4
을 쓸 때 [NSNumber numberWithInt:4]
을 쓰는 것과 같지만 입력은 훨씬 적습니다. 예를 들어, 초기화
NSArray *oneTwoThree = [NSArray arrayWithObjects: [NSNumber numberWithInt:1], [NSNumber numberWithInt:2], [NSNumber numberWithInt:3], nil];
지금 보이는 이전 구문이 모습이 더 많은 읽을 수
NSArray *oneTwoThree = @[@1, @2, @3];
있다.
참고 : 두 번째 코드 조각은 배열 초기화에도 새로운 구문을 사용합니다.
그렇다면 .... 무엇이 바람직할까요? 'NSNumber * num = 5; BOOL 테스트 = [num intValue] <4;'또는 NSNumber * num = 5; BOOL test = num <@ 4;'? 첫 번째 질문은 내가이 튜토리얼에서 놀랐으며이 질문을 제기했기 때문에 두 번째 질문은 내가 기대했던 것입니다. – Aerovistae
@Aerovistae 숫자에 대해서만 수학 연산을 수행 할 계획이라면 NSNumber로 감쌀 필요가 없으므로 가장 좋은 방법은'int num = 5; BOOL 테스트 = num <4 '. 'NSNumber'를 사용해야 할 경우 첫 번째 코드 샘플 만 올바른 결과를 제공합니다 ('5'앞에 at 기호를 추가한다고 가정). 두 번째 예제는 값이 아닌 포인터를 비교하므로 비교 결과는 임의적입니다. – dasblinkenlight