В чем разница между примитивным типом данных и непримитивным типом данных (тип данных, определенный Apple)?

Какая основная разница между этими двумя ..? было бы хорошо, если бы кто-нибудь мог объяснить на примере NSInteger и NSNumber .. Спасибо


person Ankit Srivastava    schedule 14.06.2012    source источник


Ответы (5)


Основное различие связано с тем, где они остаются в памяти, объекты хранятся в куче, а тип значения хранится непосредственно в стеке ...

куча: это область памяти, используемая для распределения динамической памяти.

стек: это раздел памяти, который выделяется для автоматических переменных в функциях. Данные хранятся в стеке с использованием метода «последний вошел - первым ушел» (LIFO).

О NSInteger и NSNumber:

NSInteger - это не что иное, как синоним длинного целого числа, а NSNumber - это класс Objective-C, а точнее подкласс NSValue.

person aleroot    schedule 14.06.2012
comment
Не главное отличие, а в некоторых случаях и вовсе не соответствует действительности .. NSInteger * i = malloc (sizeof (NSInteger)); NSString * constString = @constString; - Совершенно противоположное тому, что вы сказали. - person Oleg Trakhman; 14.06.2012
comment
Конечно, вы можете заставить тип значения оставаться в куче, но это не поведение по умолчанию ... В вашем примере вы вручную выделяете память и объявляете указатель на NSInteger, вы не используете тип значения, но указатель для доступа к адресу памяти ... - person aleroot; 14.06.2012
comment
1) Тип памяти по-прежнему не является основным отличием объектов от обычных старых типов данных. 2) Во многих языках, например, объекты C ++ могут быть размещены в стеке. И это поведение по умолчанию. 3) В некоторых случаях объекты Objective-C могут быть размещены в стеке. - person Oleg Trakhman; 14.06.2012
comment
Это различие не особенно полезно проводить. Ивар примитивного типа будет в куче вместе с объектом, который его держит. - person jscs; 14.06.2012

объект: данные члена + функция, работающая с данными

Итак, примитивный тип данных - это просто данные, а не метод, напрямую связанный с ними.

объект - это что-то вроде модуля, включая данные и функцию (здесь метод).

NSInteger - это примитивный тип данных. NSNumber - это объект, это данные члена, возможно, NSInteger.

person Wubao Li    schedule 14.06.2012

Примитивные типы данных хранят прямое значение, например NSInteger хранит целочисленное значение (либо 32-битное целое число, либо 64-битное целое число в зависимости от скомпилированной архитектуры), объекты являются экземпляром класса с методами, свойствами и т. Д.

Чтобы получить NSInteger из NSNumber, вы должны использовать

[aNumber intValue];
person lyptt    schedule 14.06.2012

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

person Annia Martinez    schedule 07.11.2012

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

person Abhishek    schedule 14.06.2012