以前写代码的时候没有考虑过这个问题,响应操作与内存之间没有什么关系吧,但是我错了
//分段控件
UISegmentedControl * MySegmentedControl = [[UISegmentedControlalloc]initWithFrame:CGRectMake(20,400, 100, 30)];
MySegmentedControl.backgroundColor = [UIColor grayColor];
//分段控件样式
MySegmentedControl.segmentedControlStyle =UISegmentedControlStyleBar;
// 分段控件的标题和下标
[ MySegmentedControlinsertSegmentWithTitle:
@"显示"atIndex: 0animated: YES ];
[ MySegmentedControlinsertSegmentWithTitle:
@"隐藏"atIndex: 1animated: YES ];
[self.viewaddSubview:MySegmentedControl];
[MySegmentedControl addTarget:selfaction:@selector(TapMySegmentedControl:)forControlEvents:UIControlEventValueChanged];
-(void)TapMySegmentedControl:(id)sender
{
// SegmentedControlField.backgroundColor = [UIColor redColor];
UISegmentedControl * MySegmentedControl = (UISegmentedControl *)sender;
switch (MySegmentedControl.selectedSegmentIndex) {
case 0:
SegmentedControlField.text = [NSStringstringWithFormat:@"%@",[MySegmentedControltitleForSegmentAtIndex:0]];
break;
case 1:
SegmentedControlField.text = [NSStringstringWithFormat:@"%@",[MySegmentedControltitleForSegmentAtIndex:1]];
default:
break;
}
[self.viewaddSubview:SegmentedControlField];
“隐藏”“显示”竟然重叠了
奇怪,以前没有出现过这个问题
加了背景之后这个问题就不存在了?
SegmentedControlField.backgroundColor = [UIColor redColor];
难道是加了背景颜色就能解决内存问题?不可能,是因为背景颜色盖住了Field里面的内容,内存还是泄露了
解决方法:
static UITextField *SegmentedControlField = nil;
if (SegmentedControlField == nil)
{
SegmentedControlField =[[UITextField alloc]initWithFrame:CGRectMake(200, 400,100, 30)];
}
每次触发某个方法的时候,这一段总要执行一次,所以造成了开始的那个错误,定义了一个局部变量之后就不会生成很多次的Field导致内侧泄露了