2012-02-20 3 views
1

Я пишу приложение на основе финансов, и мне нужно настраивать поведение для операций NSDecimalNumber, поэтому я вызываю [NSDecimalNumber setDefaultBehavior:(MyHandlerSubclass)] при запуске приложения. Однако я только что узнал из файла заголовка NSDecimalNumber, что его нужно называть на каждом потоке вычисления десятичных чисел могут выполняться.NSDecimalNumber, NSDecimalNumberHandler и потоки

Я мог бы прямо позвонить [(NSDecimalNumber *) performOperation:withBehavior:], передавая мой MyHandlerSubclass каждый раз, но он растет многословным и утомительным. Есть ли способ устранить многословие, поддерживать setDefaultBehavior :, и не нужно беспокоиться о том, что вычисления выполняются в разных потоках с неправильным поведением? Похоже, мне пришлось бы написать свою собственную упаковку, чтобы сделать это.

+0

Как часто вы используете темы для своего приложения? Как правило, вы хотите основной поток и, возможно, 1-2 рабочих потока, но не более того. Ваш код не должен утомиться, если вы правильно выполняете свои потоки, вы также можете проверить «NSRunLoop», «NSOperationQueue» и «GCD» вместо потоков. –

+0

Richard: это не вопрос о том, как лучше всего использовать потоки, я знаю обо всех этих. Я часто использую очереди GCD, и нет никакой гарантии, на какой поток они работают, как вы знаете. – refulgentis

+1

То же самое относится к очередям; вы (а) не должны планировать десятки или сотни блоков в глобальных параллельных очередях и (b) не должны иметь больше нескольких других очередей в приложении (что на самом деле является просто другой формой (a)). – bbum

ответ

2

Я пишу финансов на основе приложения, и мне нужно пользовательское поведение для операций NSDecimalNumber, поэтому я называю [NSDecimalNumber setDefaultBehavior: (MyHandlerSubclass)] при запуске приложения. Тем не менее, я только что узнал из файла заголовка NSDecimalNumber, который должен быть вызван , для каждого потока десятичных чисел вычислений может быть .

Это кажется неуправляемым в контексте очередей. Нет никакой гарантии, какой поток может быть запущен в любой заданной очереди GCD, будь то ваше собственное создание или одна из системных очередей. (Очевидно, что основная очередь является исключением из этого правила).

В документации ничего не говорится об этом ограничении. Либо документы неправильные, либо неправильный заголовок ...

... и это документы (разборка - это мой друг). Введите ошибку.

Невозможно избежать использования более подробной формы для вызова + setDefaultBehavior: в начале любого запланированного блока (чтобы покрыть произвольную проблему с потоком).

Файл с ошибкой, требующий улучшения, поскольку текущее поведение не имеет смысла в мире, основанном на очереди (и, пожалуйста, укажите здесь ошибку # здесь).

+0

Done, 10898798 (подал его, прежде чем я прочитал ваш ответ, поэтому язык немного груб, так как я все еще не уверен, что я что-то упустил, но он имеет смысл). Спасибо за подтверждение проблемы, я всегда чувствую себя немного глупым, когда я сталкиваюсь с такими странными проблемами, потому что я не уверен, что это я не знаю, техника, неправильные заголовки или неправильная документация. – refulgentis

Смежные вопросы