2011-08-01 2 views

답변

6

클래스

목적-C 런타임이 궁극적으로 범주를 포함 인스턴스의 클래스 계층 구조를 생성하여 분류 방법 명예의 카테고리의 영향. 카테고리를 구현하는 클래스의 인스턴스는 추가 서브 클래스보다 비용이 많이 들지 않거나 메모리를 요구하지 않습니다. 범주 메서드는 런타임에 적용되지만 일단 메서드가 클래스에 추가되면 해당 클래스에 정의 된 메서드와 아무런 차이가 없습니다. 이 개체들 사이에서 메시지를 전송하는 기계는 모두 동일합니다.

카테고리는 코드 디자인과 관심사 분리에 관한 것입니다. Cocoa 패턴을 메모리 최적화 측면에서 생각하지 않고 클래스를 설계하는 데 도움이되는 도구로 사용하면됩니다.

@NSResponder가 더 좋은 점을 생각 나게 런타임 환경에 대한 범주의 전반적인 영향. 카테고리는 런타임에로드되기 때문에 사용되기 전까지는로드되지 않습니다. 정말 큰 클래스 나 클래스 클러스터는 별도의 범주에 상위 수준의 프레임 워크 용 코드를 포함 할 수 있습니다. 더 높은 수준의 프레임 워크를 완전히 피하면 추가 한 카테고리를로드 할 필요가 없습니다. 예를 들어, 클래스가 Foundation 레이어에서 제대로 작동하고 코코아 레이어에서 사용될 때 추가 기능을로드 할 수 있습니다. 그래서 이것은 공간을 절약하는 것으로 생각할 수 있습니다. 그리고 이것은 그림 전체에 대한 좋은 대답입니다.

그래도 일부 수업을 작성하는 경우이 방법을 사용하면 메모리를 직접 최적화 할 수 없습니다. 여러 레이어에 걸쳐있는 많은 코드를 작성하지 않는 한 일반적으로 카테고리를 사용하여 직접 사용하거나 다른 객체에서 사용할 수 있도록합니다. Objective-C와 Cocoa 프레임 워크는이 목적을 잘 수행하는 코드 묶음을 지연로드하기위한 좋은 기계를 가지고 있습니다.

+0

카테고리의 코드가 실제로 사용될 때까지 메모리에로드되지 않는다는 세부 정보가 있습니다. – NSResponder

+0

사실입니다. 나는 그것을 기록했다. – keparo

+0

컨텍스트에 대해서만 NSDate에 범주를 추가했습니다. 얼마나 많은 메모리가 필요합니까? – Moshe

4

메모리 사용량 범주의 이점은 사용하기 전까지는 앱이 카테고리를로드하지 않는다는 것입니다. 넥스트 스텝 (NeXTSTEP) 시대의이 표준적인 예는 뷰의 인쇄 코드를 카테고리에 넣는 것이 었습니다.

관련 문제