当前位置: 首页 > 面试题库 >

Swift中具有UITextView属性的自定义UIView的加载时间较慢

经兴安
2023-03-14
问题内容

我最初问这个问题。我以为自定义视图的加载时间较慢的原因是由于将多个视图彼此叠加,或者可能是由于某些递归问题。但是,在切出越来越多的代码以查看会有什么不同之后,最终取决于我是否有UITextView礼物。因为问题的明显根源与我在第一个问题中所期望的完全不同,所以我决定开始一个新问题,而不是在旧问题上添加冗长的更新。

我用两个视图控制器设置了测试项目。第一个视图控制器上的按钮将show
segue调用给第二个视图控制器。第二个视图控制器上有我的自定义视图。(使用第二个视图控制器,使我了解了加载自定义视图所花的时间。)

自定义视图代码:

import UIKit

@IBDesignable class UIMongolTextView: UIView {

    var textView = UITextView() // key line

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }

    override init(frame: CGRect){
        super.init(frame: frame)
    }
}

如您所见,与a的唯一区别UIView是我添加了一个UITextView属性。正是这种自定义视图加载非常缓慢。在Instruments中运行“分配”工具,我得到以下结果(计数为997):

在此处输入图片说明

但是,如果我注释掉

    //var textView = UITextView()

那么我的自定义视图加载速度非常快,只有7个计数。

在此处输入图片说明

这里发生了什么?是否可以UITextView在自定义视图中使用属性并避免这种缓慢的加载时间?


问题答案:

尝试过类似的操作,其中将标签和文本字段作为子视图添加到uiview子类。我的操作方式如下:

@interface CustomTextField : UIView

@property (weak, nonatomic) IBOutlet UITextField *valueField;

@end

因此,我们有一个xib文件,实际上在该文件上添加了标签和文本字段。在xib文件上,文件所有者为“ CustomTextField”,出口从此处与头文件链接。

构造方法如下所示:

- (id)initWithValue:(NSString *)value
{
    self = [super initWithFrame:CGRectZero];
    if (self) {
        NSArray *nibs = [[NSBundle mainBundle] loadNibNamed:NSStringFromClass([self class]) owner:self options:nil];
        UIView *view = nibs[0];
        self.valueField.frame = view.bounds;
        [self setFrame:view.bounds];
        [self addSubview:view];
        [self.valueField setText:value];
    }

    return self;
}

对我来说很好。



 类似资料:
  • 在Spring Boot中,有一个属性文件application.property,与这个属性一起,我创建了一个额外的属性文件,名为MyOwnProp.properties。 如何在中加载?表示如何在Application.properties中包含另一个命名属性? 有什么进展吗?

  • 我在我的SpringBoot应用程序中使用SpringCloud配置,我需要编写一些自定义代码来处理属性,当属性被标记为这样时,这些属性将从我的公司密码库中读取。我知道SpringCloud支持Hashicorp Vault,但在这种情况下不是这样的。 我不想硬编码从不同的源检索特定的属性,例如,我会为应用程序创建一个属性文件,其中profile的值为: 但对于其他一些配置文件,如,我会: 因此,

  • 我们正在使用Spring数据,并试图创建一个带有子查询的自定义查询,结果投影有一个数组和其他属性,我们的问题是子查询数组。 预测如下:

  • 问题内容: 我希望能够在加载Laravel / Eloquent模型时为其添加自定义属性/属性,类似于使用RedBean的 方法可以实现的那样。 例如,目前,在我的控制器中,我有: 能够省略循环并已经设置并填充了“ available”属性将是很好的选择。 我尝试使用文档中描述的一些模型事件在对象加载时附加此属性,但到目前为止还没有成功。 笔记: “可用”不是基础表中的字段。 是作为JSON对象作

  • 我正在尝试使用Javascript选择此复选框 下面的代码可以工作,但并不理想 我试过这些 但它们并不起作用。有什么想法能让这件事成功吗? 数据值未硬编码的更新代码