2009-10-08 3 views
0

내 응용 프로그램 위임자에는 여러 컨트롤러에서 사용하는 변수가 있습니다 (컨트롤러에서 이러한 변수에 액세스하는 방법에 대한 뉴스 그룹에 감사드립니다). 각 컨트롤러는 한 번 이상 액세스해야 할 수 있습니다. 내가 가지고있는 컨트롤러 초기화에 나는 애플 대리자 개체 그냥 액세스에 대한 포인터를 얻을 경우 아무것도 바꿀 것 (그 날이 지금이 SRC를 볼 수 noneone 기타로)iPhone SDK : speed vs mem footprint

 
((MyAppDelegate *) [UIApplication sharedApplication].delegate).soundEffects 

판독 가능 무시 문제 :이 코드를 사용 그렇게 좋아 :

그것은 내 첫 번째 방법은 변수에 도착하는 속도가 느려질 수 수 있지만, 예를 foo 변수를 유지하기 위해 더 많은 MEM 스토리지를 필요로 두 번째 방법처럼 보인다
 
... 
MyAppDelegate *foo = [UIApplication sharedApplication].delegate 
... 
foo.soundEffects ... 

.

무엇이 더 좋습니까?

감사합니다.

답변

0

이 경우 속도 나 메모리에 대해 걱정할 필요가 없습니다. 문제가 있음을 알기 전에 최적화에 대한 유혹에 저항하십시오. 코드를 읽는 사람이 단 한 명이라도 코드의 가독성에 중점을두면 훨씬 효과적입니다. 읽기 쉽고 유지 보수하기 쉬운 잘 설계된 코드는 버그가 적고 속도 나 메모리 문제에 직면 해 있으면 최적화하기가 더 쉽습니다. 여기저기서 몇 바이트를 희생해서 코드를 읽기 쉽게 만들면 망설이지 마십시오.

이 경우 제안 된 변경 사항은 확실히 올바른 방향으로 향하는 단계이므로 원하는 경우이 점진적 변경을 수행하십시오.

대담한 느낌을주고 올바른 방향으로 나아가려면 soundEffects 멤버 변수를 필요로하는 각 컨트롤러에 추가하고 @property (비 원자, 유지)를 사용하여 속성으로 만들고 set 이 속성은 각 컨트롤러 (앱 위임 응용 프로그램 : didFinishLaunchingWithOptions : 및이 컨트롤러를 구성 할 수있는 모든 곳)를 구성한 후에 구성됩니다. 이 방법으로 컨트롤러는 앱 위임이 존재하는지 알 필요조차 없습니다. 이 "느슨한 결합"은 객체 간의 종속성을 최소화하여 객체를 유지 관리하기 쉽게 만드는 객체 지향 설계 미덕입니다.

+0

또한 컴파일러가 코드를 최적화하는 데 아주 능숙하며 동일한 코드를 생성 할 가능성이 매우 높습니다. 위와 같이 가장 가독성 높은 코드로 이동하고 성능을 위해 도구를 최적화 할 위치를 결정합니다. – zaph

+0

고맙습니다. 내가 v2에서 저를 위해 일하는 것 같아요. :) – leon