我不知道这个问题是否有意义。但是我想知道如何在不使用任何NSObject
的情况下为initializers.
创建新实例我已经看到我可以像这样两种方式创建新的NSMutableArray
。
NSMutableArray *myArray = [[NSMutableArray alloc]init];
通常情况下,我会使用NSObject
方法或其他任何init:
方法为我的designated initializers.
创建一个实例,但我不知道如何创建如下示例的方法.. < / p>
NSMutableArray *myArray = [NSMutableArray array];
我见过NSMutableArray
的文档,它是NSArray
的子类。而且NSArray
也有这样的方法来实现上面的例子。
+(id)array;
但我想知道array:
方法中的代码是什么。否则如何编写一个与我自己的NSObject
相同的方法?在投票之前请问我,如果你想要更多的解释。
答案 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,就像上面示例中所做的那样。