如何在没有init()方法的情况下创建新实例?

时间:2012-12-28 19:23:35

标签: objective-c ios initialization nsobject

我不知道这个问题是否有意义。但是我想知道如何在不使用任何NSObject的情况下为initializers.创建新实例我已经看到我可以像这样两种方式创建新的NSMutableArray

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

通常情况下,我会使用NSObject方法或其他任何init:方法为我的designated initializers.创建一个实例,但我不知道如何创建如下示例的方法.. < / p>

NSMutableArray *myArray = [NSMutableArray array];

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

+(id)array;

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

4 个答案:

答案 0 :(得分: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,执行你想要的那个对象然后返回它。

答案 1 :(得分:2)

从Apples文档Object Initialization,您可以推断创建对象时实际上并不需要启动:

  

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

如果您的代码不期望初始化的实例变量,那么从技术上讲,您不必init。但是有很多caveats(参见链接),实际上你应该做init。我能想到的唯一例外是你从头开始明确创建了对象类,而不是像NSObject那样基于它 - 然后你知道状态是什么状态。

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

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

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

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