Подтвердить что ты не робот

Что такое NSZone? В чем преимущества использования initWithZone:?

Существует так много функций, как

1. NSDefaultMallocZone()
2. NSCreateZone();
3. NSRecycleZone();
4. NSSetZoneName();
5. NSZoneMalloc();
and many more related to NSZone

Что означает NSZone, где использовать эти функции и когда?
В чем преимущества initWithZone: и как использовать в моем приложении iphone?

4b9b3361

Ответ 1

NSZone - это способ оптимизации Apple выделение и освобождение объекта. NSZone не является объектом; это непрозрачный C-struct хранит информацию о том, как память должна обрабатываться для набора объекты.

Редко приходится беспокоиться о обработки собственных зон в Приложения; Cocoa обрабатывает его прозрачно. NSZone по умолчанию созданный при запуске и всех объектах по умолчанию выделяется там. Так почему вы хотите использовать свои собственные?

Если вы массово распределяете сотни дешевые объекты, вы можете найти стоимость фактического распределения пространства для них становится значительным. Поскольку стандартная зона используется все время, она может стать очень неоднородным; удаленный объекты могут оставлять неудобные промежутки во всей памяти. Распределитель для стандарт NSZone знает это, и это пытается заполнить эти пробелы в предпочтении захватить больше памяти с системы, но это может быть дорогостоящим во времени если зона стала довольно большой.

Если вы хотите массово выделить объекты, то вы можете создать свою собственную зону и скажите ему не беспокоиться о том, чтобы найти пробелы для ввода новых объектов. распределитель теперь может перейти к концу его выделенной памяти каждый раз и быстро назначьте память вашему новому объектов, что сэкономит много сил.

Выделители могут сэкономить ваше время в другом месте, так как запрашивать ОС для больше памяти, которую необходимо сделать зоне когда он заполняется, это еще один если это сделано много. Гораздо быстрее попросить огромные куски памяти за раз, и вы можете сказать ваш NSZone, что делать здесь.

По слухам, NSZone может сэкономить время освобождения в добром старом Дни тоже с помощью метода, который просто отбрасывает всю выделенную память без необходимости звонить deallocators. Если набор объектов самодостаточно, это может сэкономить много времени, так как вы можете их всех сразу же без утомительного освобождая их всех. Увы, там похоже, не является признаком этой находки в текущей документации; единый метод NSZone (NSRecycleZone?) тщательно помещает все объекты в зоны по умолчанию NSZone. Не точно огромная экономия времени.

Итак, в итоге, зоны экономят ваше время в массовые распределения. Но только если программисты знают, как их использовать!

От CocoaDev