2014-10-09 5 views
1

Что такое использование памяти/обработки, что я буду при использовании один:Сколько памяти делает NSNotificationCenter использует

[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(dismissKeyboard) name:UIKeyboardWillHideNotification object:nil]; 

Или:

NSNotificationCenter * notificationCenter = 
[notificationCenter addObserver:self selector:@selector(dismissKeyboard) name:UIKeyboardWillHideNotification object:nil]; 

PS: Я думаю, чтобы используйте NSNotificationCenter для трех разных вещей. Так что мое любопытство

+0

Вы хотите знать, сколько памяти использует ваше приложение, когда вы добавляете наблюдателей в Центр уведомлений? –

+0

Да. Если Центр уведомлений будет использовать много моего оборудования – Gian

+0

Я уверен, что потребление памяти и процессорного времени будет намного меньше, чем при загрузке изображения из ресурсов. Это не то, о чем вам следует беспокоиться. – medvedNick

ответ

3

Ваш вопрос немного неясен. Если вы имеете в виду «сколько времени требуется, чтобы позвонить [NSNotificationCenter defaultCenter]?», Не беспокойтесь об этом. Это тривиально. Обычно люди выгружают [NSNotificationCenter defaultCenter] в переменную, чтобы сохранить ввод. Обычно я вызываю переменную nc, потому что это так долго. Остальная часть этого ответа связана с производительностью NSNotification, которая может и не быть тем, о чем вы просили.

Какао обычно не дает обещаний об этих вещах. Вы не можете опираться на детали реализации, и, к сожалению, CFNotificationCenter не является частью исходной версии Core Foundation, поэтому вы не можете всплыть и посмотреть, как это реализовано в настоящее время.

Но опыт предполагает (исходя из настройки производительности, которую я должен был сделать несколько лет назад), что он реализован как массив наблюдений. Таким образом, он хранит наблюдателя, селектор, имя и объект, что требует около 4x (pointersize) памяти плюс, вероятно, служебные данные структуры ObjC. Так что, возможно, 20 с лишним байтов или тому подобное на 64-битной платформе.

addObserver и removeObserver были примерно эквивалентна стоимости добавления или удаления записи в качестве NSMutableArray (в частности, removeObserver представляет собой О (п) на общее количество наблюдений, зарегистрированных в центре). Проводка уведомления - O (n) от общего числа наблюдений, зарегистрированных в центре. (Опять же, это основано на обратном проектировании, оно может меняться со временем, но я серьезно сомневаюсь в этом. Я уверен, что это очень стабильный код.)

Это означает, что NSNotification не очень хорошо масштабируется до тысяч наблюдения. Это не означает, что вы должны «избегать NSNotification по соображениям производительности». (Я ненавижу, когда люди говорят такие вещи, даже не проверяя их для своей ситуации.) Это просто означает, что вам нужно быть вдумчивым, прежде чем создавать сотни или тысячи уведомлений в системе. Для этого специально разработан KVO.

Для вашего конкретного примера это именно то, для чего предназначен NSNotification, так что это то, что вы должны использовать.

+0

Большое спасибо @Rob Napier, вы точно уточните, что я хотел знать. – Gian

1

Цель-C dynamic dispatch Язык. Что означает это сообщение notification is at the core of Cocoa. Вы не беспокоитесь о том, сколько памяти используется. Просто обратите внимание на то, что когда вы добавляете Observer, убедитесь, что вы их удалите.

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