哪种是为性能设置属性的首选方法

时间:2016-03-04 22:04:13

标签: ios swift performance

最近我使用Swift开始了IOS开发。我看到有两种设置UI元素属性的方法:

  1. 使用"实用程序>属性检查器"
  2. ViewController (e.g self.actionLabel.textAlignment = .Center)
  3. 中覆盖 viewDidLoad 函数

    所以问题是:

    • 在性能方面,首选哪种方式设置属性值?
    • 如果通过" Utilities>设置属性属性检查器" 在哪个文件中存储?

    对于简单的应用程序而言,它使用哪种方式并不合理,但我认为在大型应用程序中可能存在轻微或相当大的差异。提前谢谢!

3 个答案:

答案 0 :(得分:1)

  

在性能方面,首选哪种方式设置属性值?

我不确定哪个本身更快。虽然我相当确信您的界面构建器设置已之前加载到初始View Controller。这会导致您首先加载Interface Builder设置,然后加载您的编程设置(这将覆盖您的界面构建器设置)。

查看此帖子: How does XCode load the main storyboard?

  

如果属性通过“Utilities> Attributes inspector”在哪个文件中设置   它存储了吗?

在文本编辑器中打开 Main.storyboard ,您会看到所有设置都直接存储在XML中:

<!-- started from random node -->
     <rect key="frame" x="82" y="479" width="211" height="51"/>
        <color key="backgroundColor" red="0.17207773850489261" green="0.46615564923228975" blue="0.77629813762626265" alpha="1" colorSpace="calibratedRGB"/>
        <constraints>
            <constraint firstAttribute="width" constant="211" id="S1M-Vg-xbE"/>
            <constraint firstAttribute="height" constant="51" id="nr7-Cq-G9C"/>
        </constraints>
        <fontDescription key="fontDescription" name="AvenirNext-Medium" family="Avenir Next" pointSize="21"/>
        <state key="normal" title="Login">
            <color key="titleColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
        </state>
        <connections>
            <action selector="handleLoginTapped:" destination="dtF-AM-7P4" eventType="touchUpInside" id="iVh-kl-1Hl"/>
        </connections>
    </button>
    <imageView userInteractionEnabled="NO" alpha="0.10000000000000001" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="question" translatesAutoresizingMaskIntoConstraints="NO" id="a1j-ZC-tn9">
        <rect key="frame" x="162" y="567" width="50" height="50"/>
        <constraints>
            <constraint firstAttribute="width" constant="50" id="PLN-f0-vSm"/>
            <constraint firstAttribute="height" constant="50" id="Uga-aV-5p4"/>
        </constraints>
    </imageView>
    <imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="wra_retina-2" translatesAutoresizingMaskIntoConstraints="NO" id="qkc-Mg-pmQ">
        <rect key="frame" x="46" y="20" width="282" height="144"/>
        <constraints>
            <constraint firstAttribute="height" constant="144" id="OjZ-Nw-qwL"/>
        </constraints>
    </imageView>

       <!-- And on, and on, and on it goes -->

期待有关此问题的其他答案。

答案 1 :(得分:1)

即使是巨大的应用程序也不会同时加载大量元素,因为屏幕空间相当有限。一句话:不要将你的决定建立在性能上,也就是“微观优化”。如果您没有完全错误,则在运行时不会看到任何差异。但它可能会对您的代码库和开发产生巨大影响。

正如之前出现的那样:如果故事板或nib文件中有数千个元素,那么无论如何你都做错了 - 它们的目的是打印蓝图。例如,您不会在测验游戏中为每个问题创建专用元素,而只是在运行时填充具体数据的模板。

答案 2 :(得分:0)

无论哪种方式都有相同的机会。他们的表现是一样的。有时您必须在代码中设置属性。简单的方法是在故事板中设置属性。 但是,如果要在运行时更改属性,则应使用代码中的属性。