iphone - 发布对象是否必要?

标签 iphone objective-c ios ipad xcode4

我被困在内存管理方面。请帮我解决我的问题。

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(及其表亲)将保留对象,只要它在集合中即可。

关于iphone - 发布对象是否必要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12912425/

相关文章:

iphone - 将完整的类对象存储到 iPhone 中的数据库中

ios - 如何保存和重用整数

android - 用于第 3 方/内置应用程序的 iPhone 自动化

ios - Sprite-kit physicsBody apply脉冲

ios - 覆盖-tableView :commitEditingStyle:forRowAtIndexPath: to display info

ios - 如何修复框架错误?

ios - 从 StoryBoard 到 AppDelegate 引用 UITabBarController 的步骤

iphone - UIView动画问题(将扩展动画与收缩动画匹配)

android - Android的这个post-UrlRequest如何转换成IOS呢?

ios - Facebook Login Swift 无法在设备上运行(但可以在 IOS 模拟器上运行)