当前位置: 首页 > news >正文

《深入浅出iPhone/iPad开发(第2版)》——你已经创建了自己的第一个iPhone应用程序!...

本节书摘来自异步社区《深入浅出iPhone/iPad开发(第2版)》一书中的你已经创建了自己的第一个iPhone应用程序!,作者 【美】Dan Pilone , Tracey Pilone,更多章节内容可以访问云栖社区“异步社区”公众号查看

你已经创建了自己的第一个iPhone应用程序!
深入浅出iPhone/iPad开发(第2版)
所有的部分都连接在一起。

描述界面。

iDecide由2个nib组成:MainWindow.xib和iDecideViewController.xib。合在一起,它们是用户看到的UI。

视图在视图控制器中被连接到代码。

我们的视图通过界面构建器被连接到实现代码,使用的是IBOutlets和IBActions。IBOutlets给予我们到UI组件的引用,而IBActions在事件发生时被调用。

在视图控制器中实现我们的应用程序的行为。

遵循MVC模式(或者实际上只是VC模式),我们拥有在视图控制器中实现的所有的行为,清晰地与视图本身分离开。如果需要更新,视图控制器使用IBOutlets返回我们的实际UI控件。

界面构建器创建nib文件(使用.xib扩展名),并用XML描述GUI。
nib文件通过CocoaaTouch框架加载,并在运行时变成CocoaaTouch类的具体实例。
为了将在一个nib中描述的组件连接到你的代码,你使用IBOutlets和IBActions。
Xcode是为应用程序维护你的代码和文件的地方。
Xcode是你的项目开发的中心,并为编辑你的代码,创建你的应用程序,并在运行它时进行调试提供支持。
iPhone模拟器让你可以不需要真正的设备,而只在Mac上测试你的应用程序。
这里没有愚蠢的问题
问:文件的所有者是什么意思?

答:界面构建器期望什么类都有个nib文件的所有者。你可以改变该类在界面构建器中认为的是什么,但是默认的是,一个由Xcode主要视图控制器创建的新建立的项目,便是通过Xcode创建主要视图的文件所有者。这就是为什么我们没有改变任何东西的原因。由于文件的所有者是我们的iDecideViewController建立的,界面构建器查看iDecideViewController的头文件,并理解为我们有一个名为descriptionText的IBOutlet和一个名为buttonPressed的IBAction。当你连接UILabel的引用接口到文件所有者descriptionText时,界面构建器保存必要的信息,以便当nib通过应用程序被加载时,在我们的iDecideViewController中引用会被正确设置。同样的事情也发生在TouchUpInside事件,除了在这种情况下,不是一个组件连接一个引用,而是一个组件的事件连接到一个应该被调用的方法。

注意(界面构建器的类期望会被加载到nib,但并不意味着其他的类不能尝试加载),如果那个类没有必要的属性和方法,它只是可能工作得不好。

问:为什么我们的新文本字符串前面会有一个@?

答:CocoaaTouch框架为它的文本字符串使用一个字符串类名为NSString。由于它是如此普遍,Objective-C内置支持从常量创建它们。如果你表示一个字符串常量,则应该在NSString之前放置一个@字符。否则,它只是一个类似C或C++中的普通char*。

问:我们已经介绍的内容有多少是专门针对iPhone的?为iPod Touch或iPad做开发会有很大不同吗?

答:不全是!开发iOS的一个好处是,大部分为一种iOS设备创建的东西可以直接应用到另一种iOS设备上。你需要关心的是相关设备的专用硬件能力(例如,尝试在一款较旧的iPod Touch或iPad上使用摄像机功能是不会工作的),以及你的视图与图像的屏幕分辨率是否需要改变,但除此之外,为不同设备做开发还有更多你需要注意的。

如果你在脑海中坚持MVC模式,并确保从视图中分离出了逻辑,这会使你为应用程序添加新视图变得更加容易。

问:Xcode实际上是怎么构建应用程序的?

答:我们打算在接下来的内容中来更多地讲一讲。简单表述为,Xcode可以集齐所有你的资源和代码,将它们连接在一起,然后最终糅合出一个不错的程序,放入你的iOS设备上。

问:为什么我一直听到界面构建器?它究竟是什么?

答:在以前,Xcode 4的视图在一个单独的应用程序中被编辑,叫做界面构建器。现在它是Xcode的一部分,实际上不再叫界面构建器。由于需要过渡,人们可能依旧在工作中或聊天中称之为IB(界面构建器)。

问:当视图被编译时,为什么还是.xib文件?难道不该改变点什么吗?

答:在编译后,.xib文件实际上是.nib文件的二进制形式。

问:我不断听到的“无正式文件的API”究竟是什么?

答:它们是苹果使用的私有方法,但是你不能用。多任务就是一个例子。它刚刚成为可供开发人员在iOS 4中使用的方法,但一些苹果的应用程序已经能够从一开始就在后台运行(例如,当你切换到其他应用程序的时候,iPod应用程序不会停止播放)。

你通常看到当开发人员试图自定义一个标准的iOS控件或者改变一个物理按键的作用时,会触碰到无正式文件的私有方法。不要这样做。苹果会在审核期间查出来,并拒绝让你的应用程序通过。苹果保护这些API是保护它们平台的一部分,并且现在的无正式文件也许会在未来允许使用。


d95cef0095eea5e48bc8611582b3510ae9a20608


09e2f9168fd68211f1a4292fad165fb1bc2846d7


8c1a0823305c9757b622b3d6c269c54ee7ee8101

你的任务是从游泳池中选择文件名称,并遵循图中的意思把它们放入相应的空白行中。一个文件名不能使用两次,且文件名称不必全部使用。你的目标是完成该图,使该图解表示出iDecide的设计过程。


071b592558b14105abc0c0a2d10b187e2c10bdf3

exercise_pool_chair.jpg游泳池解谜答案
你的任务是从游泳池中选择文件名称,并遵循图中的意思把它们放入相应的空白行中。你不能使用相同的文件名称,且文件名称不能全部使用。你的目标是完成该图,使该图解表示出iDecide的设计过程。


071b592558b14105abc0c0a2d10b187e2c10bdf3

开动脑筋,思考那些我们在这一章中使用的新术语对应的英文单词。


71922ece65835e30bde030ecfec49803d745374d

4.一些不能依靠模拟器测试的东西。

5.这是用来建立一个从实现代码到视图的输出连接。

7.该术语用来描述一个iPhone应用程序中的每一个屏幕。

8.用于编写iPhone应用程序的框架。

10.在应用程序中用于组织图形的文件夹。

12.对iPhone应用程序使用的IDE名称。

13.在Xcode中使用,以提供类的访问。

纵向的

1.用来编写iPhone应用程序的语言。

2.用来在台式机上测试应用程序。

3.用于接收代码中的事件,并触发一些事情。

6.这是一个编辑器的名字,用于Objective-C。

9.iPhone是这种类型的设备。

11.用于创建视图的文件的名字。

exercise_puzzle.jpgiOS填字游戏
开动脑筋,思考那些我们在这一章中使用的新术语对应的英文单词。


b5755c32baca842450cfe0e0508115e3d429e580

4.一些不能依靠模拟器测试的东西。(PERFORMANCE)

5.这是用来建立一个从执行代码到视图的输出连接。(IBOUTLET)

7.该术语用来描述一个iPhone应用程序中的每一个屏幕。(VIEW)

8.用于编写iPhone应用程序的框架。(COCOATOUCH)

10.在应用程序中用于组织图形的文件夹。(RESOURCES)

12.对iPhone应用程序使用的IDE名称。(INTERFACEBUILDER)

13.在Xcode中使用,以提供类的访问。(FRAMEWORKS)

纵向的

1.用来编写iPhone应用程序的语言。(OBJECTIVEC)

2.用来在台式机上测试应用程序。(SIMULATOR)

3.用于接收代码中的事件,并触发一些事情。(IBACTION)

6.这是一个编辑器的名字,用于Objective-C。(XCODE)

9.iPhone是这种类型的设备。(MOBILE)

11.用于创建视图的文件的名字。(NIB)

相关文章:

  • 十分钟搞清字符集和字符编码
  • 缓存失效竟然可以这么解决?
  • 一个最简单的jQuery插件编写历程
  • 《Android游戏开发详解》一2.10 使用对象
  • 《Python核心编程(第3版)》——2.8 练习
  • 《编译与反编译技术实战 》一 第1章 实践的环境与工具
  • Hadoop创始人Doug Cutting谈未来大数据的技术
  • 《PowerShell V3——SQL Server 2012数据库自动化运维权威指南》——2.16 创建索引...
  • 《嵌入式C编程:PIC单片机和C编程技术与应用》一1.11 兼容性
  • 《CCNA学习指南:Cisco网络设备互连(ICND1)(第4版)》——2.5节点对点通信
  • 《走进SAP(第2版)》——1.2 小结
  • 《HTML5实战》——第2章 创建表单:输入小部件、数据绑定以及数据验证
  • 《Nmap渗透测试指南》—第7章7.9节系统漏洞扫描
  • Firefox OS 模拟器
  • ThinkPHP学习(五)图片验证码
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 11111111
  • Android优雅地处理按钮重复点击
  • cookie和session
  • GitUp, 你不可错过的秀外慧中的git工具
  • Making An Indicator With Pure CSS
  • node学习系列之简单文件上传
  • Objective-C 中关联引用的概念
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 基于web的全景—— Pannellum小试
  • 力扣(LeetCode)22
  • 目录与文件属性:编写ls
  • 使用 Docker 部署 Spring Boot项目
  • 用jQuery怎么做到前后端分离
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • #传输# #传输数据判断#
  • #每日一题合集#牛客JZ23-JZ33
  • (1)bark-ml
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (阿里云万网)-域名注册购买实名流程
  • (二)WCF的Binding模型
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (六)激光线扫描-三维重建
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (三) diretfbrc详解
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (一)基于IDEA的JAVA基础1
  • (转)VC++中ondraw在什么时候调用的
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .NET MVC第三章、三种传值方式
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
  • @RequestParam,@RequestBody和@PathVariable 区别
  • @Transactional 详解
  • [ Linux ] Linux信号概述 信号的产生