学习的第四天(xcode4.2的一些新特性)

来源:互联网 发布:网络推广课程培训班 编辑:程序博客网 时间:2024/06/16 22:33

以下转载自http://hi.baidu.com/gungod/blog/item/5f6a57091979d4b02eddd490.html

1. 工程项目模板类型的更改

          Xcode4时代                                           Xcode4.2新模板
Navigation-based Application  ------->Master-Detail Application => iphone

Splite View-based Application ------->Master-Detail Application => ipad

OpenGL ES Application --------------->OpenGL Game

Tab Bar Application      --------------->Tabbed Application

Utility Application         --------------->Utility Application

View-based Application --------------->Single View Application

Window-based Application------------>Empty Application

 
2.  新增一编译级特性——Automatic Reference Counting
 这似乎是Xcode4.2也增加了类似其他面向对象语言的GC(垃圾回收器)的概念。不知道我的理解是否正确?但在实践中若是iphone应用编程或导入以前的工程项目最好还是禁用ARC,(我们自己勤快点养成释放清理对象的习惯。)方法为:Project Info -> Apple LLVM compiler 3.0 - Language -> Objective-C Automatic Referencing Counting, 设置为NO即可。


否则会对release,retainCount,retain等内存相关操作在编译时出现红色警告:
 


 3. 新增特性——Storyboard

Storyboard是Xcode4.2新增的又一个特性,它将原有工程中的所有xib文件集成在一起,用拖曳的方式建立ViewController相关之间的跳转关系,使得整个程序的UI跳转逻辑清楚明了。简单地说,storyboard引入了2个概念:

scene:一个场景,由一个viewController和相关的xib表示。

segue:(英文原意为继续、持续)。在这是用于连接scenes,其有多种类型,包括:Push,Modal,Popover and more。

当然segue也负责传递数据和返回数据。

整个程序的界面转换就是在各个scene之间切换。界面跳转关系,比如按哪个键跳到哪个界面,是由segue来描述。segue也可以带数据,以便做数据传递。(也因此被说是抄袭Adobe的Flash)。

要点:必须有一个viewController是作为storyboard的初始界面的,及需要勾选上Initial Scene项。如下图:


 

StoryBoard相对于以前的NIB/XIB的优势:

  • 能够减少很多与View相关的代码量。
  • 能够使View和Controller进一步解耦。
  • 能够优化程序的“页面流”,使程序的结构更清楚。

      通常,NIB是和ViewController相关联的,很多时候ViewController都有其对应的NIB文件。该文件的作用就是描述用户界面以及初始化对象和界面元素对象。虽然这些都可以在代码中来实现,但为了高效编写程序代码,xCode给我们提供了IB来绘制界面。而StoryBoard的引入,则是进一步加强了这方面的功能,之前的NIB文件没有办法描述ViewController之间的跳转过渡,只能通过代码中调用类似-presentModalViewController:animated:或-pushViewController:animated:这个两个方法来实现。现在,在StoryBoard中引入了Segue这一概念,由Segue定义从一个ViewController到另一个ViewController的过渡。只需要像之前连接界面对象和Action Method那样将ViewController之间用合适的Segue连接起来即可,无需任何手写代码。即使是自定义Segue,也只需编写Segue的实现,而无需编写调用的代码,一切都由StoryBoard帮我们调用。 


 要准确用好StoryBoard机制,必须严格遵守MVC原则。要让View和Controller充分解耦;并且不同的Controller之间也是充分解耦。所以AppDelegate就应该是处理UIApplication的回调,而不应该负责用户界面的处理。更不应该直接把AppDelegate当ViewController用,乃至直接在UIWindow上绘制界面。虽然,这有可能简单明了,毕竟UIWindow也是UIView的子类。但我们还是要有优良的习惯:由ViewController来负责处理View才是正确之道。从近期苹果针对xCode的项目模板的变化上看也反映这种优化趋势:

      在Xcode 4时,程序项目模板(如View-Based Application)开始鼓励使用UIWindow的rootViewController属性来指定第一屏的ViewController,以保证AppDelegate只专注于它应该做的事情。如今Xcode4.2引入StoryBoard后,AppDelegate就直接不管ViewController的事情了,第一屏使用的ViewController(即rootViewController)可以在StoryBoard中设置。

如何从NIB/XIB迁移到StoryBoard,有些什么改变?

  • ViewController不需要NIB/XIB文件,连接Outlet和Action的操作都可以在StoryBoard上完成。
  • 孤立View(独立于ViewController的View)是不能出现在StoryBoard里,所有View必须通过ViewController来管理。(这样,StoryBoard更像是Controller对象的容器,而不是View对象的容器,以前NIB/XIB倒显得可以视为View对象的容器)
  • ViewController之间的过渡代码不需要了,用StoryBoard的Segue直接可视化连接不同的ViewController。
  • UIWindow对象的作用被进一步淡化,在StoryBoard图上没有体现出AppDelegate对象——因为它本来就不应该来处理界面View的。
  • 代码编写要严格遵守MVC设计模式,才能用好StoryBoard来高效开发程序。

实践中的问题:
      XCode项目如果包含StoryBoard创建的,就无法在iOS 4.x的模拟器和iOS 4.x的真机上调试,运行,不报错,但是得到的结果只有黑屏。这应该是storyboard只有iOS5支持的原因吧。

原创粉丝点击