iphone - Objective c,实例成员的内存管理

标签 iphone objective-c ios memory-management

我对实例成员的内存管理感到困惑。我有一个带有 ivar 的类:

DetailedResultsTableViewController *detailedResultsTableViewController;

@property (nonatomic, retain) DetailedResultsTableViewController *detailedResultsTableViewController;

在 .m 文件中:

@synthesize detailedResultsTableViewController;

[detailedResultsTableViewController release];

当我初始化这个变量时:

self.detailedResultsMapViewController = [[DetailedResultsMapViewController alloc] initWithNibName:@"DetailedResultsMapViewController" bundle:nil];

我在这个初始化之后立即测试了保留计数,它是 2!如果我在函数末尾释放它,它将落入未分配的对象。我究竟做错了什么?我应该如何初始化这种类型的变量? 谢谢!!

最佳答案

首先你不应该看retaincount,它不是很可靠。

其次,您的属性(property)将被设置为保留。所以当你给它分配一些东西时,它会增加 reatincount。 alloc 也是如此。

这样做你正在泄漏:

self.detailedResultsMapViewController = [[DetailedResultsMapViewController alloc] initWithNibName:@"DetailedResultsMapViewController" bundle:nil];

你应该这样做:

DetailedResultsMapViewController *vc = [[DetailedResultsMapViewController alloc] initWithNibName:@"DetailedResultsMapViewController" bundle:nil];
self.detailedResultsMapViewController =vc;
[vc release], vc= nil;

或者使用自动释放:

self.detailedResultsMapViewController = [[[DetailedResultsMapViewController alloc] initWithNibName:@"DetailedResultsMapViewController" bundle:nil] autorelease];

关于iphone - Objective c,实例成员的内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8576593/

相关文章:

objective-c - iOS 中的 fopen 问题

iphone - 我无法在功能完成之前隐藏按钮并设置图像

iphone - 是否有更简单的示例可用于使用 EAAccessory 执行串行通信?

iphone - CTLine 有 "string access"是什么意思?

ios - 将 JSQMessagesViewController 与 Parse.com 一起使用

iphone - Objective-C iPhone - 在 UITableView 数据源的多个部分中排序数据

ios - 无法从 swift 访问 objective-c 方法。桥接设置和 obj-c 类实例化

ios - 按下完成后如何从 MPMoviePlayerController 中删除动画

iOS模拟器: Which folders can be safely deleted?

iphone - 如何在方向更改时禁用 MobileSafari 的内容缩放?