每次拨打init
时,是否必须致电alloc
?如果有必要,我应该在自定义课程init
中做什么?
答案 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
也不例外。