2014-07-20 6 views
2

저는 올해 컴퓨터 과학 프로그램에서 배운 약간의 자바 배경에서 왔습니다. 나는 이제 객관적인 C를 배우고있다. 최근에 혼란 스러웠던 것은 숫자 개체였습니다. 왜 번호 객체를 초기화 할 필요가 없습니까? 아래를보십시오 :번호 객체를 초기화해야하는 이유는 무엇입니까?

NSNumber *myFloat; 

    myFloat = [NSNumber numberWithDouble: 10.09]; 

우리는 우리 자신의 객체를 작성할 때 항상 아래와 같이 초기화해야합니다.

someObject x = [[someObject alloc]init]; 

여기 왜 다른가? 그것은 우리가 기본적으로 빌드하는 객체가 그것을 초기화하는 방법으로 가지고 있기 때문입니까? 숫자 객체는 숫자 객체를 설계 한 프로그래머가 변경 한 "초기화 방법"이 있습니까?

답변

4

초기화됩니다. numberWithDouble: 메서드는 [[NSNumber alloc] initWithDouble:]을 호출하는 것과 같습니다. 비슷한 방식으로 NSArray *array = [NSArray arrayWithObjects:object1, object2] 또는 [NSArray *array = [[NSArray alloc] initWithObjects:object1, object2]으로 배열을 만들 수 있습니다.

this question 또한이 구현의 추론에 대해 확인할 수 있습니다.

1

NSNumber 인스턴스를 할당/초기화하고 해당 값을 부동 소수점으로 설정하는 편리한 방법 일뿐입니다. 그것은 NSNumber가 특별하고 alloc/init을 필요로하지 않는다는 것을 의미하지는 않습니다. 당신은 코코아와 코코아 터치의 모든 곳에서 이와 같은 메소드를 발견 할 것이고, 커스텀 클래스에 대해서 똑같은 일을 할 수 있습니다.

3

그들은 초기화되었으므로 [[NSNumber alloc] init...] 메서드를 살펴보십시오. numberWithDouble[[NSNumber alloc] initWithDouble:]을 통해 NSNumber의 인스턴스를 만드는 클래스 메서드입니다. 이런 것이 뭔가 :

또한의 NSNumber의

@10.09 
@(9 + 1.09) 
@YES 

NSDictionary와

@{@"key": @"value"} 
@{@"enabled": @YES} 
+0

리터럴에 대한 좋은 점은 후드 아래에'alloc init '이 있다는 것입니다. – p4sh4

0

내부적으로 numberWithDouble의 구현을 작성하기 위해 문자를 잊지 마세요

@implementation NSNumber (NSValueCreation) 

+ (instancetype) numberWithDouble:(double)value 
{ 
    return [[self alloc] initWithDouble:value]; 
} 

@end 

numberWithDouble : 단지 편리한 래퍼 메서드입니다.

자신의 클래스 중 일부에서 자신 만의 편리한 메소드를 만드는 것이 유용 할 수 있습니다.

관련 문제