跳到主要内容

Object-C new和alloc/init的区别 ?

参考答案:

在 Objective-C 中,newallocinit 是用于创建和初始化对象的常见方法,但它们之间有一些重要的区别。

  1. alloc/init:

alloc 是一个类方法,用于分配内存给一个对象实例。它返回一个指向新分配但未初始化的对象的指针。

init 是一个实例方法,用于初始化对象。它返回初始化后的对象(通常是 self)。

通常,你会将这两个方法一起使用来创建一个新的对象实例:

MyClass *myObject = [[MyClass alloc] init];

这行代码首先调用 alloc 来分配内存,然后调用 init 来初始化这个新分配的对象。 2. new:

new 是一个便利方法,它实际上是 allocinit 的组合。当你调用 new 时,它会自动为你调用 alloc 来分配内存,然后调用 init 来初始化对象。因此,以下两行代码是等效的:

MyClass *myObject = [[MyClass alloc] init];
MyClass *myObject = [MyClass new];

注意

  • 如果你重写了 init 方法,并希望提供自定义的初始化逻辑,那么你通常不需要重写 new 方法,因为 new 只是 allocinit 的一个包装。
  • 你可以通过重写 allocinit 方法来控制对象的创建和初始化过程,但这通常是不推荐的,除非你有特殊的需求。
  • 如果你需要执行额外的初始化步骤(例如,设置某些属性或执行其他设置),你可能会创建一个自定义的初始化方法(例如 initWithValue:),然后在这个方法中调用 [super init]。在这种情况下,你仍然可以使用 alloc 来分配内存,但你需要直接调用你的自定义初始化方法,而不是 initnew

总的来说,alloc/init 提供了更灵活的方式来创建和初始化对象,而 new 是一个更简洁的便利方法。在大多数情况下,你可以使用 new,但如果你需要更细粒度的控制,那么 alloc/init 可能是更好的选择。