iPhone:使用 Interface Builder 自定义 UITableViewCell ->如何释放cell对象?
官方文档告诉我,我必须做这三件事才能正确管理“nib 对象”的内存。
@property (nonatomic, retain) IBOutlet UIUserInterfaceElementClass *anOutlet;
“然后您应该合成相应的访问器方法,或者根据声明实现它们,并(在 iPhone OS 中)在 dealloc 中释放相应的变量。”
- (void)viewDidUnload {
self.anOutlet = nil;
[super viewDidUnload];
}
这对于正常视图来说是有意义的。但是,对于通过 .nib 文件加载的自定义 UITableViewCells
的 UITableView,我该如何做到这一点?
IBOutlets 位于 MyCustomCell.h(继承自 UITableViewCell)中,但这不是我加载笔尖并将其应用到单元格实例的位置,因为这发生在 MyTableView.m 中,
我也是如此仍然在 MyCustomCell.m 的 dealloc
中释放 IBOutlets
还是我必须在 MyTableView.m 中执行某些操作?
另外,MyCustomCell.m 没有 - (void)viewDidUnload {}
,我可以在其中将我的 IBOutlets
设置为 nil,而我的 MyTableView.m 有。
The official documentation tells me I've to do these 3 things in order to manage the my memory for "nib objects" correctly.
@property (nonatomic, retain) IBOutlet UIUserInterfaceElementClass *anOutlet;
"You should then either synthesize the corresponding accessor methods, or implement them according to the declaration, and (in iPhone OS) release the corresponding variable in dealloc."
- (void)viewDidUnload {
self.anOutlet = nil;
[super viewDidUnload];
}
That makes sense for a normal view. However, how am I gonna do that for a UITableView with custom UITableViewCells
loaded through a .nib-file?
There the IBOutlets
are in MyCustomCell.h (inherited from UITableViewCell), but that is not the place where I load the nib and apply it to the cell instances, because that happens in MyTableView.m
So do I still release the IBOutlets
in the dealloc
of MyCustomCell.m or do I have to do something in MyTableView.m?
Also MyCustomCell.m doesn't have a - (void)viewDidUnload {}
where I can set my IBOutlets
to nil, while my MyTableView.m does.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您的 IBOutlets 属性是单元格吗?如果是这样,则在 MyCustomCell 的 dealloc 方法中释放它们。
确保您遵循 tableView 的准则并在 tableview:cellForRowAtIndex 中调用 dequeueReusableCellWithIdentifier: 。当 tableView 不再需要自定义单元格时,它将释放它们。假设您没有任何其他对单元格的引用(您不应该这样做),那么将为 tableView 出列的单元格调用 dealloc。
Are your IBOutlets properties of the cell? If so then release them in MyCustomCell's dealloc method.
Make sure that you are following the guidelines for tableViews and calling dequeueReusableCellWithIdentifier: in tableview:cellForRowAtIndex. The tableView will release your custom cells when it no longer needs them. Assuming that you do not have any other references to your cells (you shouldn't) then dealloc will be called for the cell dequeued by the tableView.