0

我不知道这个问题有什么意义。但是我想知道我们如何在NSObject不使用任何initializers.我所见的情况下为 an 创建新实例,我可以通过NSMutableArray这两种方式创建新实例。

NSMutableArray *myArray = [[NSMutableArray alloc]init];

一般来说,我会使用方法或任何其他方法为我NSObject上面的方法创建一个实例,但我不知道如何创建一个方法,如下例..init:designated initializers.

NSMutableArray *myArray = [NSMutableArray array];

我看过文档NSMutableArray,它是NSArray. 并且也NSArray有这样的方法来实现上面的例子。

+(id)array;

但我想知道array:方法内部的代码是什么。否则如何为我自己编写一个与此相同的方法NSObject?在投票之前问我,如果你想要更多的解释。

4

4 回答 4

2

在您的 SomeObject 类中添加此类方法

+(SomeObject)object{
 SomeObject *object = [[self alloc] init];
 //You can do something else to your object here.
 return object;
}

然后在您项目的其他地方,您可以导入 SomeObject 并执行以下操作:

SomeObject *myObject = [SomeObject object];

基本上这就是 NSArray 所做的一切。如果您希望自己的 NSObject 执行类似这样的添加类方法 (+),该方法返回它自己的实例。在该方法中,只需分配 init,对该对象执行任何其他操作,然后返回它。

于 2012-12-28T19:26:21.433 回答
2

从 Apples 文档Object Initialization中,您可以推断出在创建对象时实际上不需要初始化:

初始化将对象的实例变量设置为合理且有用的初始值

如果您的代码不需要初始化实例变量,那么从技术上讲,您不必init. 然而,有这么多caveats(见链接),在实践中做一个init是你应该做的。我能想到的唯一例外是您从头开始显式创建了对象类,而不是基于 NSObject 之类的东西——那么您就知道一切都处于什么状态。

于 2012-12-28T19:40:17.287 回答
1

您看到的是对象上的类方法。[NSMutableArray 数组]; 正在创建一个分配的数组并将其返回给您。在 arc 之前,这很重要,因为它还会返回给您一个自动释放的数组。但是要回答您的问题,它是在幕后调用 alloc/init 函数。

另请注意,“alloc”是分配内存的函数,而 init 是在分配对象后初始化对象的函数。您可以使用其他关键字来分配内存,例如“复制”和“新”,但我怀疑这就是您要寻找的。

于 2012-12-28T19:25:31.743 回答
1

您必须在某处为对象分配内存。在[NSMutableArray array]它调用 +(id) 数组的情况下,它看起来像这样:

+(id)array
{
  return [[NSMutableArray alloc] init];
}

它必须在某处分配内存并初始化对象,但您可以将 init 隐藏在类方法中,就像上面示例中所做的那样。

于 2012-12-28T19:37:25.940 回答