我找到了解决这些问题的方法:(但我仍然不明白为什么dealloc
我们必须在这种情况下使用[_profileImage release];
,即使我们不拥有,也alloc
{ {1}}也new
或copy
,_profileImage
)
MyUITableView.m
- (void)dealloc {
[_profileImage release];
// and all other ivars get released here
[super dealloc];
}
- (void)onClickLogoutButton {
if (_profileImage != nil) {
_profileImage = nil;
}
// and other operations
}
当我[_profileImage release];
中有onClickLogoutButton
时发生崩溃,因为我不拥有(alloc
也不new
也不copy
} {{ 1}},但只需使用_profileImage
将对象传递给_profileImage = [UIImage imageWithData:data];
:
_profileImage
以下代码在Xcode 5,iOS 7中使用手动保留释放(MRR)。
- (void)onClickLogoutButton {
if (_profileImage != nil) {
[_profileImage release];
_profileImage = nil;
}
// and other operations
}
导致崩溃,其中一条错误消息为ProfileCell *cell = (ProfileCell *)[tableView dequeueReusableCellWithIdentifier:identifierForProfileCell];
是因为我错误地发布了什么吗?但我不知道在何时何地以及什么被释放。项目中有一个注销功能,注销后我们应该发布一些内容还是让dealloc来完成这项工作?首次登录时会发生错误,然后注销然后重新登录,滚动到配置文件单元格并崩溃。
我应该在退出后拨打Thread 1: EXC_BAD_ACCESS (code=2, address=0x2448c90c)
中的[self reloadData];
吗?
MyUITableView.m
MyUITableView.m
答案 0 :(得分:4)
您之前在tableView中注册了ProfileCell吗?
在viewDidLoad中这样:
- (void)viewDidLoad
{
[super viewDidLoad];
[self.tableView registerClass:ProfileCell forCellReuseIdentifier:@"ProfileCell"];
}