В Objective C, как +alloc знает сколько памяти выделять?

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

JavaScript выжил и стал популярным просто, потому что у разработчиков есть очень мало выбора в вопросе - это - единственный язык, который может взаимодействовать с DOM. Его единственная конкуренция на стороне клиента от вещей как Flash и Silverlight, которые имеют совсем другую модель.

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

Для маленьких сценариев это прекрасно, но это - ужасный язык для записи больших сложных систем. То, что вещи как Firefox и Gmail (частично) записаны в нем, является героическим выполнением с их стороны, не знаком, что язык готов к реальной разработке приложений.

9
задан Rob Jones 3 September 2009 в 03:04
поделиться

4 ответа

+ alloc - это просто метод класса, как и любой другой. Реализация по умолчанию в NSObject использует class_getInstanceSize () для получения размера экземпляра, который должен быть выделен. Размер экземпляра определяется на основе комбинации размера структуры времени компиляции для каждого класса (без наследования) и расчета общего размера класса и всех суперклассов для каждого времени выполнения. Вот как возможны нехрупкие iVars в 64-битных средах выполнения и в средах выполнения iPhone.

Некоторые классы, в частности кластеры классов, на самом деле не выполняют истинное распределение экземпляров до тех пор, пока не будет вызван инициализатор (вот почему важно выполните self = [super init] в методах инициализатора).

14
ответ дан 4 December 2019 в 10:33
поделиться

+ [NSObject alloc] разрешает вызов среды выполнения Objective-C, которая знает размер каждого класса.

4
ответ дан 4 December 2019 в 10:33
поделиться

Метод alloc выполняет эквивалент sizeof при создании нового объекта. Кроме того, переменные экземпляра myString и yourString на самом деле не имеют слишком много места для хранения: они просто указатели, поэтому alloc просто выделяет достаточно памяти для хранения адресов. .

-2
ответ дан 4 December 2019 в 10:33
поделиться

Майк Эш написал статью, описывающую, как это работает:

Friday Q&A 2009-03-13: Intro to the Objective-C Runtime

4
ответ дан 4 December 2019 в 10:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: