2010-01-20 4 views

답변

4

Objective-C의 메서드 캐시 내의 선택기 해시에서 하나의 버킷에 모두 쌓인 매우 병리학 적으로 명명 된 선택기 집합을 만드는 경우 응용 프로그램의 속도가 느려집니다.

매우 드뭅니다. 성능 문제가있는 경우 Instruments (또는 다른 도구)를 사용하여 성능 문제를 측정하고 최적화를 시도하기 전에 그 위치를 확인하십시오.

rpetrich의 대답은 정확하지만 선택기 당 RAM 양은 최소화됩니다. 선택기 자체에있어 주소의 가치가있는 데이터 일뿐입니다. 실제 선택기 값은 일반적으로 사용되지 않습니다. 선택기가 정적으로 할당 된 문자열로 구성된 경우 코드가 수행하지 않는 한 실제로 메모리에 액세스 할 가능성은 거의 없습니다.

동적으로 선택기 이름을 생성하는 경우 할당은 분명히 메모리를 차지합니다.

는 (I 물론, 아주 철저하게 호기심이 왜 이렇게 많은 선택기를 생성하는하고 아주 비정형 패턴을.!) 나는 ID의 대형 세트를 관리해야

+0

, 두 가지 특정 문제 : 첫째, 세트 필요한 ID와 내 프로그램 코드에있는 선택기 세트가 겹칩니다. 둘째, ID를 정수로 매핑해야합니다. 그래서 나는 런타임이 일을 할 수있게 해줄 것이라고 생각했다 ... – Jochen

+0

대안은 단순히 ID를 반환하는 단일 선택자를 정의한 다음 필요에 따라 상기 선택기를 구현하는 것이다. 선택기가 ID 인 경우 선택기를 만드는 동작으로 ID를 만들 수 있습니다. 무지의 나의 관점에서, 그것은 여전히 ​​이상하게 보입니다. :) – bbum

1

아니,하지만 각각의 선택은 메모리에 상주해야하고 등록 할 수 없습니다. 이렇게하면 나머지 응용 프로그램에서 사용할 수있는 RAM의 양이 줄어 듭니다.

관련 문제