Форум программистов, компьютерный форум CyberForum.ru

Objective-C

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 87, средняя оценка - 4.61
трансплутон
1 / 1 / 0
Регистрация: 26.07.2011
Сообщений: 29
#1

Для чего нужен NSRunLoop и как его использовать? - Objective-C

16.04.2012, 19:33. Просмотров 11787. Ответов 8
Метки нет (Все метки)

Если бы кто-нибудь привел мне парочку примеров использования NSRunLoop и объяснил для чего вообще нужно им манипулировать - я был бы очень благодарен.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.04.2012, 19:33
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Для чего нужен NSRunLoop и как его использовать? (Objective-C):

Получить NSString из JSON и использовать его как заголовок в TableView - Программирование iOS
у меня в JSON файле есть вот такая строчка "titles of sections": мне нужно поставить каждую строку в заголовок соответствующей...

Объяснить (с примерами) для чего нужен RTTI, как и когда его можно и нужно использовать - C++
доброго времени суток. вопрос такой как я понял RTTI это свойсвто языка С++ которое было добавлено позднее его релиза, что бы...

Для чего нужен Seed() и для чего его override? - C#
Привет, ребята. Прочитал много разных статей про Seed(). И так и не могу понять зачем он нужен на практике. Вот выдержка одной из...

Непонятный кусчек кода, для чего он нужен.Непонятно его значение - C (СИ)
Всем привет! Снова вопрос, как можно реализовать следующую вещь: Допустим я ввожу какой либо символ из 3 (в моем случае F,C или K) и...

Непонятный кусчек кода, для чего он нужен.Непонятно его значение. Перезагрузка - C (СИ)
Интересный шаблон нашел, чтобы ненужные значения сразу отбрасывать, вот только в одной части разобраться сложновато. Вот код: #include...

Stateful session bean. Для чего нужен Timeout и что делать после его выполнения - Java EE
Добрый день. У меня такой вопрос. Начну сразу с простого кода одного ejb и сопутствующего Servlet ejb @Stateful ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
zulkis
682 / 609 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
16.04.2012, 20:35 #2
РанЛууууп
Хернюшка с помощью РанЛуууупа

Не по теме:

Юзайте уже хоть немного гугыл

трансплутон
1 / 1 / 0
Регистрация: 26.07.2011
Сообщений: 29
17.04.2012, 10:51  [ТС] #3
я гугл уже просто заелозил. как и эппловскую документацию. нет там ничего внятного
lexus_ilia
3046 / 922 / 34
Регистрация: 24.09.2008
Сообщений: 1,530
18.04.2012, 13:22 #4
трансплутон, Я конечно может быть чего то не понимаю. Но вот эта строка из документации четка объясняет для чего существует NSRunLoop класс
The NSRunLoop class declares the programmatic interface to objects that manage input sources. An NSRunLoop object processes input for sources such as mouse and keyboard events from the window system, NSPort objects, and NSConnection objects. An NSRunLoop object also processes NSTimer events.
zulkis
682 / 609 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
18.04.2012, 13:42 #5
lexus_ilia, Видимо не Вы один. Вообще, у Apple одна из лучших документаций, где либо мною увиденных, имхо.
трансплутон
1 / 1 / 0
Регистрация: 26.07.2011
Сообщений: 29
24.04.2012, 01:06  [ТС] #6
У Apple потрясающая документация. Просто без равных. Как и всё, что делает Apple. Но, к сожалению,
уровень моей лично квалификации не дотягивает до уровня объяснения предложенного данной документацией касательно NSRunLoop. Именно поэтому я и попросил пару простейших примеров. Или просто объяснение простым языком, зачем именно нужен этот класс. Поскольку вам абсолютно чётко понятно назначение этого и вы его уже использовали, то неужели вам трудно написать несколько строк кода и несколько строк пояснения?
Santer.Net
15 / 15 / 1
Регистрация: 18.11.2010
Сообщений: 122
25.04.2012, 12:50 #7
Вот одна из ситуаций использования NSRunLoop. Допустим есть приложение которое отображает какую-нибудь ленту новостей с большим количеством картинок которые необходимо подгружать при нажатии на какой-нибудь сел тейблвью (т.е есть тейблвью мы жмем по селлу и переходим на следующий скрин куда должны подгружаться картинки с описанием). Разумеется вся подгрузка должна происходить асинхронно. Первое что приходит в голову это при отображении нового скрина создать потоки которые подгружали бы картинки и передавали бы их аймеджвью для отображения. Потом потоки подгрузили картинки и мы их релизим. Но в той же документации Аппла написано что создание потока это очень дорогостоящее удовольствие, посколько в кернел моде (режиме ядра) необходимо создавать управляющие структуры потоков, а потом их удалять оттуда. Поэтому для оптимизации можно создать потоки при инициализации программы, засунуть в них NSRunLoop и передавать им управление когда необходимо загрузить картинку. Т.е NSRunLoop нужны для мониторинга каких-нибудь событий и выполнения действий (Можно провести аналогия с TranslateMessage DispatchMessage Loops в Win32 API). Таким образом мы не создаем кучу потоков а потом их релизим.
zulkis
682 / 609 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
25.04.2012, 13:13 #8
Цитата Сообщение от Santer.Net Посмотреть сообщение
Но в той же документации Аппла написано что создание потока это очень дорогостоящее удовольствие
Можете кинуть прямую ссылку? С удовольствием прочту. Все это логично, но я чтото не помню прям в доках полного описания.
Santer.Net
15 / 15 / 1
Регистрация: 18.11.2010
Сообщений: 122
25.04.2012, 15:02 #9
Вот ссылка на аппловский гид - https://developer.apple.com/library/.../uid/10000057i

А вот кусок про структуры (страница 21, если в пдф смотреть )

Thread Costs
Threading has a real cost to your program (and the system) in terms of memory use and performance. Each thread requires the allocation of memory in both the kernel memory space and your program’s memory space. The core structures needed to manage your thread and coordinate its scheduling are stored in the kernel using wired memory. Your thread’s stack space and per-thread data is stored in your program’s memory space. Most of these structures are created and initialized when you first create the thread—a process that can be relatively expensive because of the required interactions with the kernel.
Table 2-1 quantifies the approximate costs associated with creating a new user-level thread in your application. Some of these costs are configurable, such as the amount of stack space allocated for secondary threads. The time cost for creating a thread is a rough approximation and should be used only for relative comparisons with each other. Thread creation times can vary greatly depending on processor load, the speed of the computer, and the amount of available system and program memory.

Добавлено через 36 минут
К стати вот еще описание когда нужно применять ран луп:
When Would You Use a Run Loop?
The only time you need to run a run loop explicitly is when you create secondary threads for your application. The run loop for your application’s main thread is a crucial piece of infrastructure. As a result, both Cocoa and Carbon provide the code for running the main application loop and start that loop automatically. The run method of UIApplication in iOS (or NSApplication in Mac OS X) starts an application’s main loop as part
2010-04-28 | © 2010 Apple Inc. All Rights Reserved. 41
●







Run Loops
Using Run Loop Objects
of the normal startup sequence. Similarly, the RunApplicationEventLoop function starts the main loop for Carbon applications. If you use the Xcode template projects to create your application, you should never have to call these routines explicitly.
For secondary threads, you need to decide whether a run loop is necessary, and if it is, configure and start it yourself. You do not need to start a thread’s run loop in all cases. For example, if you use a thread to perform some long-running and predetermined task, you can probably avoid starting the run loop. Run loops are intended for situations where you want more interactivity with the thread. For example, you need to start a run loop if you plan to do any of the following:
Use ports or custom input sources to communicate with other threads. Use timers on the thread.
Use any of the performSelector... methods in a Cocoa application. Keep the thread around to perform periodic tasks.
If you do choose to use a run loop, the configuration and setup is straightforward. As with all threaded programming though, you should have a plan for exiting your secondary threads in appropriate situations. It is always better to end a thread cleanly by letting it exit than to force it to terminate. Information on how to configure and exit a run loop is described in “Using Run Loop Objects” (page 42).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.04.2012, 15:02
Привет! Вот еще темы с ответами:

Зачем нужен массив указателей на функцию и как его использовать? - C++
народ подскажите пожалуйста, зачем нужен массив указателей на функцию и как его использовать.

Цикл While - как и для чего использовать? - Python
Здравствуйте! Если не сложно поясните момент с циклом While. Для чего применяется на практике ? Как использовать и что он делает? Ато я...

Тип void как возвращаемое значение функции: что он такое, зачем он нужен, где, когда и как его использовать? - C++
Объясните пожалуйста про Void для оооочень далекого человека. Читаю книгу Шилдта, в принципе всё ясно, всё понимаю и пробую, но вот Void -...

Для чего и как нужно использовать функции Set, Get? - C++
может кто-то обяснить для чего и как нужно использовать Set, Get в с++? есть программа, но не могу понять для чего там используются даные...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
25.04.2012, 15:02
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru