문제

배경

저는 Mac 응용 프로그램을 구축하는 데있어 개발자입니다. 스노우 레오파드에 손을 대려고합니다. 지금까지 나는 표범에지고 있었다. 나는 약 1 년 동안 코코아 개발을 그다지 강하게하지 않았습니다.

나는 특히 Snow Leopard와 Grand Central Dispatch에 대해 많은 것을 읽었습니다. 나는 그것이 블록을 사용한다는 것을 알고 있지만, 블록이 어떻게 작동하는지 또는 그랜드 센트럴 디스패치의 작동 방식에 대한 끔찍한 일에 들어 가지 않았습니다.

내 질문

Snow Leopard에서 가장 많은 새로운 멀티 스레딩 물건을 활용하면서 Snow Leopard와 Leopard를위한 하나의 코드 기반을 가장 잘 개발하는 방법은 무엇입니까?

nsoperationqueue

내 본능은 내 코드에서 직접 GCD를 다루는 것이 아니라, 대기열을 입을 필요가있을 때 NSOPERINGQUERE를 사용하여 NSOPERINGQUEUE를 사용하여 NsOperationQueue를 사용하여 NsoperationQueue를 사용하여 NsoperationQueue를 사용하여 NSOPERATIONQUEUE를 사용하여 NSOPERATIONQUERE는 GCD와 Crasher He를 최대한 활용합니다. 표범에서 발견 된 것이 이제 고정되었습니다.

수동 스레드 관리

그러나 특정 배경 스레드를 관리 할 때 Leopard에서 물건을 깨지 않고 Snow Leopard에서 사용하기 쉬운 스레드 관리 제품을 이용할 수있는 방법이 있습니까? 아니면 사람들이 각 OS마다 다른 클래스에 대해 각 OS마다 다른 대상을 가지고 있다고 추천합니까? 이것은 나에게 유지 보수 악몽처럼 보일 것입니다.

아니면 내 앱이 스노우 레오파드를 위해 완전히 최적화하지 않고 살아야 할 것입니다. +(void)detachNewThreadSelector:toTarget:withObject: 또는 비슷한 것.

사람들은 어떻게 생각합니까?

도움이 되었습니까?

해결책

GCD에 대한 장의 인상이 맞습니다. 실제로, 블록을 사용하는 모든 API는 해당 코드가 Snow Leopard에서만 실행되도록 조건부를 조절하지 않는 한 출시됩니다. 코드가 Snow Leopard에서만 사용할 수있는 기능을 지원하는 경우 이치에 맞지 만, 기능이라면 Leopard에서도 지원하는 기능이라면 모든 경우에 Leopard 코드 경로를 사용하여 Snow Leopard 특정 추가를 추가 할 수도 있습니다. 사용자에게 눈에 띄는 개선을 제공하지 않는 경로는 코드를 복잡하게하고 테스트 오버 헤드를 늘릴 것입니다.

이것은 특히 스레드 관리 또는 GCD와 같은 것들에 적용됩니다. 변경 사항이 중요한 건축이 필요합니다. 간단하지 않습니다.

if (snowLeopard) {
  [NSSnazySnowLeopardClass doSomething];
} else {
  [NSBoringLeopardClass doSomethingEquivalent];
}

일반적으로 변경 사항이 간단한 Apple이 API를 변경하지 않고 클래스 내부에서 처리합니다. 다시 말해, 문제는 Snow Leopard에서 더 쉬운 스레드 관리 코드를 사용할 수 있는지 여부가 아니기 때문에 어쨌든 Leopard를 위해 하드 버전을 수행 해야하는 이유입니다. 추가 코드 경로는 추가 코드 경로이며, 스노우 레오파드에서 상당히 다른 API를 사용하여 레오파드 지원을 삭제할 수있을 때까지 (레오파드보다 사용하기 쉬운 경우에도)는 추가 작업 일뿐입니다.

나는 당신이 실제로 표범을 목표로하고 싶은지 생각할 것입니다. Snow Leopard 채택은 상당히 많았고 Snow Leopard는 저렴한 업그레이드이며 API 변경으로 인해 Snow Leopard 전용 앱을 수행하는 소규모 개발자의 사용자에게 많은 압력이 가해집니다. Leopard에 오랫동안 머물려고하는 유일한 사용자 그룹은 기술적으로 정통하지 않은 사람들 (많은 타사 소프트웨어를 설치할 가능성이없는 사람)과 여전히 PPC Mac을 사용하는 사람들 (새 Mac을 구입하지 않은 사람들입니다. 3 년 후에는 많은 소프트웨어를 구매하지 않을 것입니다). 그것이 당신이 3-9 개월 안에 배송 될 것이라고 생각하는 앱이라면, 나는 스노우 레오파드를가는 것이 아마도 합리적인 옵션 일 것이며 개발 및 테스트 부담을 크게 줄일 것이라고 주장합니다.

다른 팁

한 가지 방법은 Leopard의 API가 Snow Leopard에서 GCD를 사용하기 위해 수정 된 것을 이해하는 것입니다. 예를 들어, 레오파드의 nsoperation 및 nsoperationqueue는 항상 가지고있는 것처럼 작동합니다. 그러나 스노우 레오파드에서는 그 아래에 GCD를 활용하도록 다시 작성되었습니다. 짜증. 10.6 사용자를위한 즉각적인 업그레이드.

또 다른 옵션은 같은 것을 사용하는 것입니다 plblocks GCD를 코드에 직접 컴파일하십시오. 그것이 효과가 있을지 모르겠지만, 그것은 가치가있을 것입니다. =))

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top