Dan*_*Dan 6 memory-leaks objective-c
在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 = [super init];
if(!temp) { [self release]; }
self = temp;
if(self) { /* initialize */ }
return self;
}
Run Code Online (Sandbox Code Playgroud)
这个推理我错了吗?可以说[super init]不太可能失败,但是为什么要将结果分配给自己并检查为零?我很高兴看到一些澄清.
| 归档时间: |
|
| 查看次数: |
564 次 |
| 最近记录: |