在'alloc'之后我是否必须始终调用'init'?

时间:2014-03-06 01:26:12

标签: objective-c

每次拨打init时,是否必须致电alloc?如果有必要,我应该在自定义课程init中做什么?

3 个答案:

答案 0 :(得分:2)

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

可以选择使用既包含alloc又与init结合的new。

ClassC *c = [ClassC new];

答案 1 :(得分:1)

假设我们正在谈论从NSObject派生的类,tateyaku已经回答了第一个问题。是的,您需要调用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 {...}

答案 2 :(得分:0)

您可以在init之后使用alloc

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也不例外。