2010-06-17 1 views

답변

4

그들은 동일한 결과를 얻기 위해 훨씬 더 많은 것을 쓰지 않고 자동 릴리즈 된 객체를 더 쉽게 얻을 수 있도록하는 편리한 메소드입니다.

BTW, NSArray에는 arrayWithObjects이라는 인스턴스 메서드가 없으며 클래스 메서드입니다.

+0

"+"는 arraryWithObjects가 클래스 메서드임을 나타냅니다. 나는 그것이 왜 인스턴스 메소드 인 것을 암시하는지 나는 모르겠다. – Devoted

+0

@Devoted, [array arrayWithObjects]'는 존재하지 않는 인스턴스 메소드를 호출하려고 시도하고있다. –

+1

Obj-C의 인스턴스에서 클래스 메서드를 호출 할 수 없습니다. 올바른 호출은'[NSArray arrayWithObjects : nil]; ' – kubi

1

제이콥의 대답은 옳다. (그래서 하나만 받아 들여라.)하지만 나는 코코아 프레임 워크가 클래스 클러스터라고 불리는 불쾌한 것을 가지고 있다고 덧붙일 것이다. 아이디어는 [NSArray array]으로 전화 할 수도 있지만 실제로 돌아 오는 개체는 실제로 특정 상황에 맞게 최적화 된 NSArray의 개인 하위 클래스입니다. 이러한 편리한 메소드는 NSArray 클래스에 사용할 클래스에 대한 "힌트"를 제공 할 수 있습니다.

예를 들어 [NSArray array]을 호출하면 비어있는 불변의 배열이 생깁니다. 빈 불변의 배열에는 얼마나 많은 다른 값을 가질 수 있습니까? 딱 하나만. 코코아는 뒤에서 [NSArray array]을 호출 할 때마다 동일한 공백 인 NSArray을 반환 할 수 있으므로이 중 하나만 할당하면됩니다. 이것은 약간의 메모리를 절약하는 멋진 최적화입니다.

이제는 구현에 대한 세부 사항을 신경 쓰지 않아도되지만 테이크 어웨이에서는 원하는 결과와 가장 근접하게 일치하는 생성자를 사용해야합니다. 특히 배열, 세트, 응용 프로그램이 더 잘 작동하도록 최적화 된 보트로드를 구현했기 때문에

관련 문제