我被困在内存管理的中间。请帮我解决我的问题。
NSMutableArray *array = [[NSMutableArray alloc]init];
Object *obj = [[Object alloc]init];
[array addObject: obj];
[obj release];
是否有必要obj
在上面的代码中发布?
我被困在内存管理的中间。请帮我解决我的问题。
NSMutableArray *array = [[NSMutableArray alloc]init];
Object *obj = [[Object alloc]init];
[array addObject: obj];
[obj release];
是否有必要obj
在上面的代码中发布?
您的问题的答案是:是的,如果您不使用ARC。如果你正在编写一个新的应用程序,你应该认真考虑使用 ARC。
Objective-C 中的容器对象总是平衡它们的保留/释放计数。换句话说,您应该始终像没有添加对象一样管理内存,并确保您自己的代码平衡其保留计数。请注意,这是一个约定,并未强制执行,但您始终可以相信内置类会遵循此约定。此外,您可以执行静态分析(XCode 中的 Cmd+Shift+B)来检测这些问题。它会在您上面的代码中指出这一点。
上述情况下的正确代码是:
NSMutableArray *array = [[NSMutableArray alloc]init];
Object *obj = [[[Object alloc]init]autorelease];
[array addObject: obj];
或者
NSMutableArray *array = [[NSMutableArray alloc]init];
Object *obj = [[Object alloc]init];
[array addObject: obj];
[obj release];
因为NSMutableArray
(及其表亲)将保留该对象,只要它在集合中。