Objective c 如何在没有init()方法的情况下创建新实例?
我不知道这个问题有什么意义。但是我想知道如何在不使用任何Objective c 如何在没有init()方法的情况下创建新实例?,objective-c,ios,initialization,nsobject,Objective C,Ios,Initialization,Nsobject,我不知道这个问题有什么意义。但是我想知道如何在不使用任何初始值设定项的情况下为NSObject创建新实例。我知道我可以通过两种方式创建新的NSMutableArray NSMutableArray *myArray = [[NSMutableArray alloc]init]; 通常,我会使用init:方法或任何其他指定的初始值设定项为我的NSObject创建一个实例。但我不知道如何创建一个类似下面示例的方法 NSMutableArray *myArray = [NSMutableArray
初始值设定项的情况下为NSObject
创建新实例。
我知道我可以通过两种方式创建新的NSMutableArray
NSMutableArray *myArray = [[NSMutableArray alloc]init];
通常,我会使用init:
方法或任何其他指定的初始值设定项为我的NSObject
创建一个实例。
但我不知道如何创建一个类似下面示例的方法
NSMutableArray *myArray = [NSMutableArray array];
我看过NSMutableArray
的文档,它是NSArray
的一个子类。还有NSArray
具有这样的方法来实现上述示例
+(id)array;
但是我想知道
数组:
方法中的代码可能是什么。否则,如何编写与我自己的NSObject
相同的方法??在投票否决之前,请询问我是否需要更多解释。您看到的是对象上的类方法。[NSMutableArray];正在创建分配的数组并将其返回给您。在arc之前,这很重要,因为它还将返回一个自动释放的数组。但要回答您的问题,它是在幕后调用alloc/init函数的
还要注意,“alloc”是分配内存的函数,而init是在分配对象后初始化对象的函数。还有其他一些关键字可以用来分配内存,比如“copy”和“new”,但我怀疑这正是您想要的。您看到的是对象上的类方法。[NSMutableArray];正在创建分配的数组并将其返回给您。在arc之前,这很重要,因为它还将返回一个自动释放的数组。但要回答您的问题,它是在幕后调用alloc/init函数的
还要注意,“alloc”是分配内存的函数,而init是在分配对象后初始化对象的函数。还有其他一些关键字可以用来分配内存,比如“copy”和“new”,但我怀疑这正是您想要的。在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执行类似于add class方法(+)的操作,该方法将返回其自身的实例。在该方法中,只需alloc init,对该对象执行任何其他操作,然后返回它 在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执行类似于add class方法(+)的操作,该方法将返回其自身的实例。在该方法中,只需alloc init,对该对象执行任何其他操作,然后返回它 您必须在某处为对象分配内存。在
[NSMutableArray]
的情况下,它调用的是+(id)数组,看起来像这样:
+(id)array
{
return [[NSMutableArray alloc] init];
}
它必须在某个地方分配内存并初始化对象,但您可以将init隐藏在类方法中,就像上面示例中所做的那样。您必须在某个地方为对象分配内存。在
[NSMutableArray]
的情况下,它调用的是+(id)数组,看起来像这样:
+(id)array
{
return [[NSMutableArray alloc] init];
}
它必须在某个地方分配内存并初始化对象,但您可以将init隐藏在一个类方法中,就像上面示例中所做的那样。从Apple文档中可以推断,创建对象时实际上不需要inititalization:
初始化将对象的实例变量设置为
和有用的初始值
如果您的代码不需要初始化实例变量,那么从技术上讲,您不必init
。然而,有太多的注意事项
(请参见链接),实际上,您应该执行init
。我能想到的唯一例外是,您从头显式地创建了对象类,而不是基于NSObject之类的东西—这样您就知道所有东西都处于什么状态。从Apple文档中,您可以推断,创建对象时实际上不需要初始化:
初始化将对象的实例变量设置为
和有用的初始值
如果您的代码不需要初始化实例变量,那么从技术上讲,您不必
init
。然而,有太多的注意事项
(请参见链接),实际上,您应该执行init
。我能想到的唯一例外是,您从头显式地创建了对象类,而不是基于NSObject之类的东西—这样您就知道一切都处于什么状态。这是不可能的!!!始终会创建一些初始值设定项。无论是init、new、calloc还是malloc。这个问题基本上都是@PeterM的翻版。我认为你上面提到的问题是关于内存管理和ARC的。@R.a我提到这个问题的原因是因为它讨论了你提到的两种风格之间的差异——在我看来,这就是你实际提出的问题,这也是你选择的答案。这是不可能的!!!始终会创建一些初始值设定项。无论是init、new、calloc还是malloc。这个问题基本上都是@PeterM的翻版。我认为你上面提到的问题是关于内存管理和ARC的。@R.a我提到这个问题的原因是因为它讨论了你提到的两种风格之间的差异——在我看来,这就是你实际提出的问题,这也是您选择的答案。当然可以,但要创建此数组,只需调用[NSArray array]代码>没有显式的init,这就是他所指的。你怎么能用你自己初始化东西