Программирование серверной стороны было вокруг для намного дольше, чем сторона клиента и уже имеет партии из хороших решений.
JavaScript выжил и стал популярным просто, потому что у разработчиков есть очень мало выбора в вопросе - это - единственный язык, который может взаимодействовать с DOM. Его единственная конкуренция на стороне клиента от вещей как Flash и Silverlight, которые имеют совсем другую модель.
Это также, почему JavaScript получил такое усилие к умному это и добавляет современные опции. Если для целого рынка браузеров было возможно отбросить JavaScript и заменить его чем-то разработанным правильно для задачи, я уверен, что они были бы. Поскольку это стоит, JavaScript имеет странные основанные на прототипе объекты, несколько аккуратных функций функционального программирования, ограниченных и изворотливых наборов и очень немного библиотек.
Для маленьких сценариев это прекрасно, но это - ужасный язык для записи больших сложных систем. То, что вещи как Firefox и Gmail (частично) записаны в нем, является героическим выполнением с их стороны, не знаком, что язык готов к реальной разработке приложений.
+ alloc
- это просто метод класса, как и любой другой. Реализация по умолчанию в NSObject использует class_getInstanceSize ()
для получения размера экземпляра, который должен быть выделен. Размер экземпляра определяется на основе комбинации размера структуры времени компиляции для каждого класса (без наследования) и расчета общего размера класса и всех суперклассов для каждого времени выполнения. Вот как возможны нехрупкие iVars в 64-битных средах выполнения и в средах выполнения iPhone.
Некоторые классы, в частности кластеры классов, на самом деле не выполняют истинное распределение экземпляров до тех пор, пока не будет вызван инициализатор (вот почему важно выполните self = [super init]
в методах инициализатора).
+ [NSObject alloc]
разрешает вызов среды выполнения Objective-C, которая знает размер каждого класса.
Метод alloc
выполняет эквивалент sizeof
при создании нового объекта. Кроме того, переменные экземпляра myString
и yourString
на самом деле не имеют слишком много места для хранения: они просто указатели, поэтому alloc
просто выделяет достаточно памяти для хранения адресов. .
Майк Эш написал статью, описывающую, как это работает: