面试题答案
一键面试Objective-C
- 对象创建:
- 使用
alloc
方法分配内存,然后使用init
方法初始化。例如创建一个NSObject
对象:
NSObject *obj = [[NSObject alloc] init];
- 使用
- 对象释放:
- 在ARC(自动引用计数)之前,使用
release
方法释放对象所占用的内存。在ARC环境下,编译器会自动插入适当的内存管理代码,程序员无需手动调用release
。例如在非ARC环境下释放上述对象:
[obj release];
- 在ARC(自动引用计数)之前,使用
- 内存管理理念:
- Objective - C 传统上采用引用计数(Reference Counting)的内存管理方式。对象有一个引用计数,当对象被创建、被引用时引用计数增加,当引用失效时引用计数减少。当引用计数为0时,对象的内存被释放。ARC是对引用计数方式的自动化管理,大大减轻了程序员手动管理内存的负担。
C++
- 对象创建:
- 在栈上创建对象,直接声明对象变量即可。例如有一个自定义类
MyClass
:
class MyClass { public: MyClass() {} ~MyClass() {} }; MyClass obj1;
- 在堆上创建对象,使用
new
关键字。例如:
MyClass *obj2 = new MyClass();
- 在栈上创建对象,直接声明对象变量即可。例如有一个自定义类
- 对象释放:
- 栈上创建的对象在其作用域结束时会自动调用析构函数释放资源。
- 堆上创建的对象,使用
delete
关键字释放内存。例如:
delete obj2;
- 内存管理理念:
- C++ 强调手动内存管理,程序员需要显式地分配和释放内存,这对程序员的要求较高,容易出现内存泄漏(忘记调用
delete
)或悬空指针(释放后继续使用指针)等问题。虽然C++11引入了智能指针(如std::unique_ptr
、std::shared_ptr
等)来帮助管理动态内存,但手动管理仍然是其内存管理的基础方式。与Objective - C的引用计数不同,C++的智能指针基于RAII(Resource Acquisition Is Initialization)机制,利用对象生命周期来管理资源。
- C++ 强调手动内存管理,程序员需要显式地分配和释放内存,这对程序员的要求较高,容易出现内存泄漏(忘记调用