Использование NSOperation для многопоточности создает слишком много объектов - PullRequest
2 голосов
/ 19 августа 2009

У меня есть приложение, которое выполняет вызовы SOAP. Чтобы пользовательский интерфейс не блокировался, мы помещаем каждый вызов SOAP в подкласс NSOperation. Это хорошо работает, но у нас есть множество различных типов вызовов SOAP. Поэтому, если мы используем 3 WSDL, каждый с 10 портами или операциями, то мы совершаем 30 различных вызовов в SOAP, и если мы помещаем каждый из них в поток, используя NSOperation, мы получаем 30 подклассов NSOperation.

Это может быть не плохо, но мы пытаемся создать библиотеку многократного использования, поэтому у нас есть один объект на WSDL, который инкапсулирует вызовы. Это хорошо, потому что мы используем WSDL2ObjC, и это инкапсулирует всю эту логику. Но тогда кажется странным иметь хороший API, к которому мы добавляем вызовы в этих многочисленных операциях NSO. Кроме того, мы выполняем потоки в самом API, чтобы вызывающий мог использовать его по своему усмотрению.

Любые предложения будут великолепны.

1 Ответ

2 голосов
/ 19 августа 2009

Если я вас правильно понимаю, у вас уже есть объекты, которые инкапсулируют вызовы службы SOAP, и вы просто хотите сократить подклассы NSOperation.

Вы зарегистрировались в NSInvocationOperation? Это подкласс NSOperation, который позволяет вам отправлять сообщение объекту в виде вызова NSOperation. Таким образом, вы все еще получаете неблокирующую операцию, но вам не нужно несколько подклассов NSOperation.

...