2014-03-05 3 views
3

방금 ​​학습을 시작했고 튜토리얼은 모든 숫자 리터럴과 문자열 리터럴 앞에 @ 기호를 사용하기 시작했으며 "좋아요, Objective-C는 리터럴 앞에 @ 기호를 사용합니다"라고 생각했지만 다음으로 아는 것이 있습니다 그들은 어떤 숫자 없이 @ 기호를 사용하고 나는 총 손실에있었습니다.4와 @ 4의 차이점은 무엇입니까?

의 차이점은 무엇입니까

(내가 말할 INT 목표 - C/C는 수 많은 종류가 있기 때문이다. 두려워 때문에 '숫자'를 말하는거야)?

답변

4

목표 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]; 

있다.

참고 : 두 번째 코드 조각은 배열 초기화에도 새로운 구문을 사용합니다.

+0

그렇다면 .... 무엇이 바람직할까요? 'NSNumber * num = 5; BOOL 테스트 = [num intValue] <4;'또는 NSNumber * num = 5; BOOL test = num <@ 4;'? 첫 번째 질문은 내가이 튜토리얼에서 놀랐으며이 질문을 제기했기 때문에 두 번째 질문은 내가 기대했던 것입니다. – Aerovistae

+0

@Aerovistae 숫자에 대해서만 수학 연산을 수행 할 계획이라면 NSNumber로 감쌀 필요가 없으므로 가장 좋은 방법은'int num = 5; BOOL 테스트 = num <4 '. 'NSNumber'를 사용해야 할 경우 첫 번째 코드 샘플 만 올바른 결과를 제공합니다 ('5'앞에 at 기호를 추가한다고 가정). 두 번째 예제는 값이 아닌 포인터를 비교하므로 비교 결과는 임의적입니다. – dasblinkenlight

0

하나는 숫자 (정수, 스칼라)입니다. 다른 하나는 NSNumber (Objective-C 개체,이 표기법에 대해서는 http://clang.llvm.org/docs/ObjectiveCLiterals.html 참조)입니다.

+0

그들은 어떻게 다르게 행동합니까 ...? – Aerovistae

+0

스칼라와 개체의 차이를 모르는 경우 혼란 스러울 수 있습니다. (글쎄, 인생은 아니지만 인생을 프로그래밍해라.) C와 Objective-C를 배우기를 원할지도 모른다. 내 책의 처음 3 ~ 4 장은 여기서 도움이 될 것입니다. http://www.apeth.com/iOSBook/ – matt

2

int 유형과 NSNumber 객체간에 차이가 있습니다. int는 정수를 저장하는 데 사용되는 데이터 유형입니다. int i = 4;

NSNumber는 임의의 유형의 숫자와 int, double, float, short, long 등을 저장할 수있는 Objective-C 객체입니다. NSNumber *num = @4;처럼 생성되며 실제로는 NSNumber *num = [NSNumber numberWithInt: 4];

4 대신 @4을 사용하는 주된 이유는 NSArrays 및 NSDictionary에 있습니다. 이러한 객체에는 int 또는 float와 같은 유형이 아닌 객체 만 저장할 수 있습니다. 숫자의 배열을 원한다면 같아야합니다. [NSArray arrayWithObjects: @1, @2, @3, @4, nil];

@는 사용자가 알게 된 다른 용도로 사용됩니다.숫자에 @를 추가하여 개체가되는 것처럼 C 문자열 ("Hello World")은 @"Hello World" 인 Objective-C 개체 (NSString)가됩니다. C 배열 [1,2,3,4]@[@1,@2,@3,@4] 인 Obj-C 객체 (NSArray)가됩니다. 사전과 동일 : @{key,value}

리터럴에 대해 더 자세히 알고 싶다면 this link 또는 this link을 사용할 수 있습니다.

+0

소원 나는 두 가지 대답을 모두 받아 들일 수 있습니다. – Aerovistae

관련 문제