UITextField在iOS 11内存泄漏

在进行项目性能优化时,通过MLeaksFinder检测到退出登录界面时存在UITextField内存泄漏。尝试通过弱引用、屏蔽密码框、分析secureTextEntry属性等方式定位问题,最终发现secureTextEntry是导致内存泄漏的原因。解决方案包括避免直接使用或在UITextField委托事件中处理secureTextEntry属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在项目优化和检查性能时候,使用了MLeaksFinder,检查界面元素的内存泄漏问题时,发现退出登录界面时候,出现了内存泄露。打印日志如下:

In case that UITextField should not be dealloced, override -willDealloc in UITextField by returning NO.
View-ViewController stack: (
    DLTLoginViewController,
    UIView,
    UIScrollView,
    UIView,
    UITextField
)

上面MLeaksFinder日志,可以发现 UITextField并没释放。接下来就是分析问题存在,步骤如下

  1. 考虑强引用问题,将UITextField属性定义为弱引用,发现问题依然存在。
  2. 屏蔽密码框,发现问题不存在,然而证明,问题在于密码框
  3. 查看密码框与用户框区分,在于secureTextEntry属性,假设是由于该属性引用
  4. 注释密码框的secureTextEntry设置,发现问题不存在

解决思路

  1. 自定义控件,可行性不大
  2. 在UITextField的委托事件,处理secureTextEntry
-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
    if (textField == self.passField) {
        textField.secureTextEntry = YES;
    } else {
        textField.secureTextEntry = NO;
    }
    return YES;
}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值