Я не мог найти четкое объяснение, просто попросив быть уверенным; C-типы данных обрабатываются одинаково (с точки зрения управления памятью) в Obj.C? т. е. они созданы в стеке, сразу выпущены и т. д.? Значит, они отличаются от объектов Obj.C? Или мы можем сделать аналогию с C# (просто аналогию не точно), чтобы типы C обрабатывались как «типы значений» и объекты Obj.C как «ссылочные типы»?C Объекты в Objective-C
ответ
Objective-C - это чистое супермножество C, поэтому все, что работает в C, работает одинаково в Objective-C.
Поведение типов данных C не изменилось. Только объекты Objective-C (экземпляры классов) имеют свои собственные методы распределения.
В отличие от C++, который фактически расширяет C, так что вы можете делать такие вещи, как «новый» char *, ObjC, как говорит porneL, чисто надмножество и во многом просто какой-то причудливый синтаксический сахар. + alloc даже не является строгой конструкцией языка. Это всего лишь код ObjC, который в конечном итоге вызывает malloc() и сохраняет некоторые вещи в указателе struct objc_object, к которому вы можете получить доступ вручную, используя стандартную нотацию C ->.
Если вам интересно, как все это работает, The ObjC Runtime Programing Guide - это хорошее место для начала (хотя он не обсуждает и не выделяет особенно, он демистифицирует objc_msgsend).
К вашему конкретному вопросу, типы данных C помещаются в стек, если вы не выделяете их в кучу с помощью malloc(). Объекты ObjC всегда выделяются в куче. Но аналогия с C# на самом деле не очень полезна. Учитывайте следующее:
int x;
int *y;
NSObject *z;
«x» - это то, что вы называете «типом значения». И y и z - это то, что вы называете «ссылочными типами». Дело не в том, что два являются C, а один - ObjC; это то, что два из них являются указателями, и поэтому почти наверняка указывают на динамическую память в куче. Вот почему у вас никогда нет объекта ObjC без указателя («id» - это просто указатель на структуру objc_object). Вот почему вы можете использовать нотацию C-указателя на объектах ObjC для извлечения их ivars (вы не должны, но можете). Это всего лишь C.
- 1. Использование ObjectiveC объекты с таНосом
- 2. программирование в C++ любит objectivec
- 3. ALLOCA и ObjectiveC Garbage Collector
- 4. ObjectiveC - конструктор, управление памятью
- 5. ObjectiveC NSURLSessionDownloadTask
- 6. Объединить строки в ObjectiveC
- 7. Передача переменных в ObjectiveC
- 8. Статическая переменная в ObjectiveC
- 9. Вычисление пересечения в ObjectiveC
- 10. NSString вопрос в ObjectiveC
- 11. AMF0 парсер в ObjectiveC
- 12. NumberFormatter - ObjectiveC
- 13. Создать код Objectivec C из диаграммы классов
- 14. Связывание ObjectiveC класс для C# проблемы
- 15. iPhone/ObjectiveC-C поплавок разделение некорректный вывод
- 16. Метод не найден в ObjectiveC
- 17. от ObjectiveC до ECMAscript
- 18. ObjectiveC, создавая массив классов
- 19. Организация проекта ObjectiveC
- 20. ObjectiveC Синтаксис определения функции
- 21. Swift framework в проекте ObjectiveC
- 22. ObjectiveC блокирует эквивалент Java
- 23. Можно ли поставить ObjectiveC @selector в NSDictionary?
- 24. AudioQueue iOS ObjectiveC
- 25. конкатенации Аудио Буферы в ObjectiveC
- 26. Назначение ObjectiveC и init?
- 27. методы Переопределение класса в ObjectiveC
- 28. Преобразовать код PHP в ObjectiveC
- 29. Тестирование загрузки класса в ObjectiveC
- 30. NSBundle не загружается в ObjectiveC