发布对象是必要的吗?

Vin*_*nay 1 iphone objective-c ipad ios xcode4

我陷入了内存管理的困境.请帮我解决我的问题.

NSMutableArray *array = [[NSMutableArray alloc]init];
Object *obj = [[Object alloc]init];  
[array addObject: obj];  
[obj release];  
Run Code Online (Sandbox Code Playgroud)

是否有必要obj在上面的代码中发布?

Kru*_*lur 5

您的问题的答案是:是的,如果您不使用ARC.如果您正在编写新的应用程序,则应认真考虑使用ARC.

Objective-C中的容器对象始终平衡其保留/释放计数.换句话说,您应该始终管理内存,就像您没有添加对象一样,并确保您自己的代码平衡其保留计数.请注意,这是一种约定,并未强制执行,但您始终可以信任内置类以遵循此约定.此外,您可以执行静态分析(XCode中的Cmd + Shift + B)来检测这些问题.它会在上面的代码中找到它.

上述案例中的正确代码为:

NSMutableArray *array = [[NSMutableArray alloc]init];
Object *obj = [[[Object alloc]init]autorelease];
[array addObject: obj];
Run Code Online (Sandbox Code Playgroud)

要么

NSMutableArray *array = [[NSMutableArray alloc]init];
Object *obj = [[Object alloc]init];
[array addObject: obj];
[obj release];
Run Code Online (Sandbox Code Playgroud)

因为NSMutableArray(和它的表兄弟)只要它在集合中就会保留它.