UIDatePicker 内存不释放

yaojy0811 2014-09-01 05:47:17
请教各位大侠,

self.window = [[UIWindow alloc] init];
self.window.frame = CGRectMake(0, 0, self.width, self.height);
self.window.backgroundColor = [UIColor colorWithRed:0/255.0f green:0/255.0f blue:0/255.0f alpha:0.5];
self.window.windowLevel = UIWindowLevelStatusBar;
[self.window makeKeyAndVisible];
UIControl * touchControl = [[UIControl alloc] initWithFrame:CGRectMake(0, 0, self.width,self.height)];
[self.window addSubview:touchControl];
[touchControl addTarget:self
action:@selector(TouchDown)
forControlEvents:UIControlEventTouchDown];

self.datePickerView = [[UIDatePicker alloc] init];
self.datePickerView.center = CGPointMake(160, 220);

self.datePickerView.datePickerMode=UIDatePickerModeDate;
//添加事件
[self.datePickerView addTarget:self action:@selector(datePickerDateChanged:) forControlEvents:UIControlEventValueChanged];

//获得当前时间
NSDate *currentDate = self.datePickerView.date;
NSLog(@"Date = %@",currentDate);
[self.window addSubview:self.datePickerView];

self.birthdayTempStr = [NSString stringWithFormat:@"%@",[[currentDate description] substringToIndex:10]];
NSString *birthday = @"";
FYFriendTime *birthdayUtil = [[FYFriendTime alloc] init];
char *birthdayChar = CoreService::getSharedService()->GetApp().GetAccount().GetBirthday();
NSString *birthdayStr = [NSString stringWithCString:birthdayChar encoding:NSUTF8StringEncoding];
birthday = [birthdayUtil birthdayDate:birthdayStr];
if (birthday.length != 0)
{
NSDateFormatter *dateFomatter = [[NSDateFormatter alloc] init];
[dateFomatter setDateFormat:@"yyyy-MM-dd"];
NSDate *date = [dateFomatter dateFromString:birthday];
[self.datePickerView setDate:date animated:NO];
self.birthdayTempStr = birthday;
}

UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(100, 440, 120, 35)];
[btn setTitle:@"确定" forState:UIControlStateNormal];
[btn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
btn.backgroundColor = [UIColor greenColor];
btn.tag = 1002;
[btn addTarget:self action:@selector(confirmBirthday) forControlEvents:UIControlEventTouchUpInside];
[self.window addSubview:btn];

-(void) datePickerDateChanged:(UIDatePicker *)paramDatePicker{
if ([paramDatePicker isEqual:self.datePickerView]) {
NSDate *currentDate = paramDatePicker.date;
// NSString * todayString = [[currentDate description] substringToIndex:10];
// NSLog(@"Selected date=%@",todayString);
NSDateFormatter *farmatter = [[NSDateFormatter alloc] init];
[farmatter setDateFormat:@"yyyy-MM-dd"];
NSString *str = [farmatter stringFromDate:currentDate];
self.birthdayTempStr = str;
}
}
-(void)TouchDown{
self.datePickerView = nil;
self.window = nil;
}
...全文
139 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
去寻找1991 2014-09-02
  • 打赏
  • 举报
回复
你从哪里看出来UIDatePicker没有被释放的? 我另构建了一个成员变量:__unsafe_unretained UIDatePicker * datePicker2;让这个datePicker2也指向那一个datePicker的内存地址。然后在dealloc方法里面输出 -(void)dealloc{ NSLog(@"%@",datePicker2); } 因为使用__unsafe_unretained不会造成强引用,不会对datePicker的释放造成影响。运行到NSLog(@"%@",datePicker2);就会崩溃。而且如果在这句话这里打断点,并且在Edit Scheme里面勾选了Enable Zombie Objects,断点到这句话时,可以看到datePicker2的类型为(——NSZombie_UIDatePicker*),也就是说变僵尸指针了,那就是释放了。
Bannings 2014-09-01
  • 打赏
  • 举报
回复
你子类化一个UIWindow,替换掉你现在用的UIWindow,然后在dealloc里看下,看有没有真的释放,如果释放了,说明有其他的对象强引用了你的picker,如果没有的话,看看window为什么没有被释放就行了
yaojy0811 2014-09-01
  • 打赏
  • 举报
回复
引用 1 楼 zhangao0086 的回复:
你看你的window释放了没有
ARC机制,我 = nil 了啊
Bannings 2014-09-01
  • 打赏
  • 举报
回复
你看你的window释放了没有

29,027

社区成员

发帖
与我相关
我的任务
社区描述
主要讨论与iOS相关的软件和技术
社区管理员
  • iOS
  • 大熊猫侯佩
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧