为什么在分配视图并将其添加到另一个视图后,保留计数变为3?

JoJ*_*oJo 1 memory-management objective-c ios

didSelectRowAtIndexPath我的功能中UITableViewController,我放置了一个UIActivityIndicatorView,UITableViewCell因为点击此单元格可能会发出一个慢的服务器请求.我打印出保留计数,UIActivityIndicatorView并注意到它是3,当我预计它是2.

// @property (nonatomic, retain) UIActivityIndicatorView *spinner;
foo.spinner = [[UIActivityIndicatorView alloc] 
    initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge
];

UITableViewCell *cell = [self.tableView cellForRowAtIndex:indexPath];
[cell addSubView:foo.spinner];

NSLog("retain count of spinner = %d", [foo.spinner retainCount]);
Run Code Online (Sandbox Code Playgroud)

第一次保留应该发生foo->setSpinner.第二个保留应该从tableView添加微调器作为子视图发生.第三名保留在哪里?你会如何避免这种内存泄漏?

NSR*_*der 7

您没有理由关心零售额是多少.您应该关注的是您的保留和释放是否均衡.

  • 但是你不知道还有多少个自动释放.这就是为什么你不能以这种方式依赖保留计数的原因. (2认同)