我对实例成员的内存管理感到困惑。我有一个带有 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/