在Objective-C中创建对象的标准方法如下所示:
MyClass* object = [[MyClass alloc] init];
Run Code Online (Sandbox Code Playgroud)
MyClass的init方法的标准实现看起来像这样:
-(id) init
{
self = [super init];
if(self) { /* initialize */ }
return self;
}
Run Code Online (Sandbox Code Playgroud)
除了一些语法更改,并且不包括工厂方法,这似乎是编写init方法并使用它的推荐方法.
据我所知,self = [super init]的目的; 是处理[super init]失败的情况.但如果它确实失败了,并且返回nil,那么内存是否会泄漏?原因是MyClass的init将返回nil,对象将为nil,将不再有引用[MyClass alloc]分配的对象的指针,因此无法释放它.
这些是我能想到的两种解决方案,但我没有在常规练习中看到过这两种解决方案.
在调用alloc之后,在调用init之前检查结果:
MyClass* object = [MyClass alloc];
if(object == nil) { /*handle the error */ }
else { object = [object init]; }
Run Code Online (Sandbox Code Playgroud)
或者,如果[super init]失败,请释放内存.像这样的东西:
-(id) init
{
id temp …Run Code Online (Sandbox Code Playgroud)