Objective c 我必须总是打电话给';初始';在'之后;alloc';?

Objective c 我必须总是打电话给';初始';在'之后;alloc';?,objective-c,Objective C,每次调用alloc时是否都必须调用init?如果有必要,我应该在自定义类init中做什么?基本答案是肯定的。alloc将创建空间,init使其能够保存数据 可以选择使用alloc和init组合的new ClassC *c = [ClassC new]; 假设我们讨论的是从NSObject派生的类,第一个问题已经由回答了。是的,您需要调用init方法以允许超级类正确初始化 第二个:除非需要初始化类成员,否则不需要实现类init方法 如果你这样做了: -(id)init { if ((se

每次调用
alloc
时是否都必须调用
init
?如果有必要,我应该在自定义类
init
中做什么?

基本答案是肯定的。alloc将创建空间,init使其能够保存数据

可以选择使用alloc和init组合的new

ClassC *c = [ClassC new];

假设我们讨论的是从NSObject派生的类,第一个问题已经由回答了。是的,您需要调用
init
方法以允许超级类正确初始化

第二个:除非需要初始化类成员,否则不需要实现类init方法

如果你这样做了:

-(id)init
{
    if ((self=[super init]))  // call super init function
    {
        _your_data = ...; // initialise an ivar
    }

    return self; // successful init returns a non null pointer otherwise return is 0
}
您可以使用不同的签名定义init方法,例如

-(id)initWithLabel:(NSString*)label {...}

您可以在
alloc
之后使用
init

NSString *str = [NSString alloc];
// some code
str = [str init];
在某些情况下,您根本不应该使用
init

NSError *err = nil;
NSManagedContext *context = ... 
[NSManagedContext save:&err]; //manager context will init err by yourself.
在自定义类中应执行哪些操作:


您应该调用
[super-methodName]
init
也不例外。

请参阅objective-c中的关于垃圾收集器-这将是explained@RagenDazs垃圾收集器?这有什么关系?它被弃用,取而代之的是ARC@BryanChen这就是问题所在,在很多没有任何意义的书籍和文章中都有充分的解释-init与垃圾回收器无关,搜索垃圾回收器的信息并不能解释这一点。@RagenDazs很抱歉,我不明白你的意思。你是说这个问题很琐碎,不值得问吗?请随意说下/标记/关闭,但不要说误导性的话。顺便说一句,在ObjC中并没有很好地解释GC这个概念,因为并没有很多人使用它。所以,没有必要再向主题启动程序显示一次。我从来没有让Xcode粘贴过这个。但我从不使用他们的模板。你不调用init的例子至少让人困惑。如果你不创建一个对象,你显然不需要调用init,你认为呢?是的,我不太清楚为什么
new
很少被使用。我猜这是因为后来引入了自动引用计数。[class new]不提供调用retain或autorelease的选项。这不再是一个问题。