MST

星途 面试题库

面试题:Objective-C与C++内存管理对比之基础

在Objective-C和C++中,分别简述对象创建和释放内存的基本方式。例如,在Objective-C中创建一个NSObject对象并释放它,在C++中创建一个自定义类对象并释放它,同时说明两者在内存管理理念上的主要差异。
21.3万 热度难度
编程语言Objective-C

知识考点

AI 面试

面试题答案

一键面试

Objective-C

  1. 对象创建
    • 使用 alloc 方法分配内存,然后使用 init 方法初始化。例如创建一个 NSObject 对象:
    NSObject *obj = [[NSObject alloc] init];
    
  2. 对象释放
    • 在ARC(自动引用计数)之前,使用 release 方法释放对象所占用的内存。在ARC环境下,编译器会自动插入适当的内存管理代码,程序员无需手动调用 release。例如在非ARC环境下释放上述对象:
    [obj release];
    
  3. 内存管理理念
    • Objective - C 传统上采用引用计数(Reference Counting)的内存管理方式。对象有一个引用计数,当对象被创建、被引用时引用计数增加,当引用失效时引用计数减少。当引用计数为0时,对象的内存被释放。ARC是对引用计数方式的自动化管理,大大减轻了程序员手动管理内存的负担。

C++

  1. 对象创建
    • 在栈上创建对象,直接声明对象变量即可。例如有一个自定义类 MyClass
    class MyClass {
    public:
        MyClass() {}
        ~MyClass() {}
    };
    MyClass obj1;
    
    • 在堆上创建对象,使用 new 关键字。例如:
    MyClass *obj2 = new MyClass();
    
  2. 对象释放
    • 栈上创建的对象在其作用域结束时会自动调用析构函数释放资源。
    • 堆上创建的对象,使用 delete 关键字释放内存。例如:
    delete obj2;
    
  3. 内存管理理念
    • C++ 强调手动内存管理,程序员需要显式地分配和释放内存,这对程序员的要求较高,容易出现内存泄漏(忘记调用 delete)或悬空指针(释放后继续使用指针)等问题。虽然C++11引入了智能指针(如 std::unique_ptrstd::shared_ptr 等)来帮助管理动态内存,但手动管理仍然是其内存管理的基础方式。与Objective - C的引用计数不同,C++的智能指针基于RAII(Resource Acquisition Is Initialization)机制,利用对象生命周期来管理资源。