MST
星途 面试题库

面试题:Objective-C中类与对象创建及生命周期管理基础

在Objective-C中,简述如何创建一个自定义类以及其实例对象?并且说明对象生命周期中主要涉及哪些方法?
31.4万 热度难度
编程语言Objective-C

知识考点

AI 面试

面试题答案

一键面试
  1. 创建自定义类

    • 在Objective - C中,创建一个自定义类需要定义一个类接口(.h文件)和类实现(.m文件)。
    • 类接口(.h文件)
      #import <Foundation/Foundation.h>
      
      // 自定义类的声明,类名通常大写字母开头
      @interface CustomClass : NSObject
      // 在这里声明属性和方法
      @property (nonatomic, strong) NSString *name;
      - (void)printInfo;
      @end
      
      • @interface关键字开始类的声明,CustomClass是自定义类名,NSObject是父类,Objective - C中所有类最终都继承自NSObject
      • @property用于声明属性,这里声明了一个name属性,nonatomic表示非原子性访问,strong表示强引用。
      • - (void)printInfo;声明了一个实例方法。
    • 类实现(.m文件)
      #import "CustomClass.h"
      
      @implementation CustomClass
      // 实现方法
      - (void)printInfo {
          NSLog(@"Name is: %@", self.name);
      }
      @end
      
      • @implementation关键字开始类的实现,在这里实现类接口中声明的方法。
  2. 创建实例对象

    • 可以使用allocinit方法来创建实例对象。
    CustomClass *customObject = [[CustomClass alloc] init];
    customObject.name = @"Example Name";
    [customObject printInfo];
    
    • [[CustomClass alloc] init]首先通过alloc为对象分配内存空间,然后通过init方法初始化对象。
  3. 对象生命周期主要涉及的方法

    • 初始化方法
      • init:通用的初始化方法,在alloc后调用,通常用于对对象进行基本的初始化操作。
      • initWith...:自定义的初始化方法,可以带参数,用于更具体的初始化场景。例如- (instancetype)initWithName:(NSString *)name;
    • 内存管理相关方法(ARC前)
      • retain:增加对象的引用计数。
      • release:减少对象的引用计数。
      • autorelease:将对象放入自动释放池,在自动释放池销毁时,会向池中的对象发送release消息。
    • ARC下内存管理相关方法:虽然ARC(自动引用计数)简化了内存管理,但对象仍有相关的方法。
      • dealloc:当对象要被销毁时调用。在ARC下,主要用于释放非Objective - C对象(如Core Foundation对象),以及执行一些清理操作,例如关闭文件描述符等。
    • 对象状态保存与恢复相关方法
      • encodeWithCoder::用于归档对象(将对象状态保存到文件等持久化存储),当对象遵循NSCoding协议时需要实现此方法。
      • initWithCoder::用于从归档数据中恢复对象状态,同样在遵循NSCoding协议时实现。