资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

iOS优化内存,提升性能之四-创新互联

在UI中显示和隐藏view

网站制作、成都网站建设的开发,更需要了解用户,从用户角度来建设网站,获得较好的用户体验。创新互联公司多年互联网经验,见的多,沟通容易、能帮助客户提出的运营建议。作为成都一家网络公司,打造的就是网站建设产品直销的概念。选择创新互联公司,不只是建站,我们把建站作为产品,不断的更新、完善,让每位来访用户感受到浩方产品的价值服务。

在UI中显示和隐藏view,需要用到的内存操作很少。但是,这个和iOS app的性能和用户体验有关。

当view显示或隐藏时,在view controller中有4个主要的方法来表示view的不同状态。

§ viewWillAppear:在view显示之前会调用这个方法。只有这个方法调用完之后,才会显示你的view。为了给应用创造一个很好的用户体验,在这里做的计算最好要非常的快。否则,用户会感觉你的导航和动画比较弱。一个好的做法是设置view的属性(例如,背景色或文本颜色)。

例如,用户按下返回按钮返回到view A。但是,在view A的viewDidAppear方法内部,有一个耗时的计算。这个计算结果可能会花几秒钟,但是同时UI线程会被阻塞来处理view A的内部逻辑,同时view A也无法显示。

  • viewDidAppear:在view显示之后,这个方法会被调用,所以你可以把你的逻辑处理放在这里。但是,如果在它执行完后,你的处理过程会改变view,用户可能会感到迷惑,这不是一个好的用户体验。

例如,你有一个排序算法来对你的table view进行排序。当用户看到view A时,旧的table还在显示。然后突然所有的的rows发生了变化,而没有任何的警告或是解释发生了什么事情。

  • viewDidDisappear:在view从UI消失之前会调用这个方法。任何属于这个view的,你想要显示给用户的,都应该放在这里。注意在这里你不应该放置太多逻辑处理的代码。如果你在这里放了很多的逻辑处理代码,那么显示一个新的view就会花很多时间。

没有什么硬性规则说你应该把逻辑处理过程放在什么地方。我向你介绍了所有的基本的概念,你可以使用他们创建比较好的用户体验和性能。

对象拷贝

你为什么需要知道对象拷贝以及为什么需要它呢?拷贝一个对象是非常有用的,如果你不想改变旧的对象,因为它可能影响到其他部分程序。在某些情况下,你根本不能修改对象,所以你只能拷贝这个对象的内容,然后再进行修改。

浅拷贝和深拷贝

在Objective-C中,浅拷贝实际上和retaining是一样的。因为浅拷贝是拷贝一个对象的指针到一个新的变量中,在浅拷贝和retaining之间是没有什么不同的。

另一方面,深拷贝意味着你会实际创建一个新的对象,然后从旧的对象中拷贝所有的数据和实例变量到新的对象中。

为了演示浅拷贝和深拷贝在Objective-C之间的不同,考虑下面的代码:

Shallow copying:

- (void)setMyObj:(NSObject *)newObj {

  if (newObj != myObj) {

    myObj = newObj;

  }

}

Deep copying:

- (void)setMyObj:(NSObject *)newObj {

  if (newObj != myObj) {

    myObj = [newObj copy];

  }

}

在第一种情况下,你把变量的值赋值给一个新的对象然后retain这个对象。在Objective-C中,这就是浅拷贝。在深拷贝例子中,代码实际上拷贝了newObj的值和实例变量到myObj。

实现一个深拷贝

如果你确实需要一个深拷贝,你必须了解对象的整个层次结构。

  • 你需要创建一个新的对象。

    另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


    分享名称:iOS优化内存,提升性能之四-创新互联
    当前路径:http://cdkjz.cn/article/ieeps.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220