博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《MonoTouch开发实践指南》一2.1 iOS SDK概述
阅读量:5758 次
发布时间:2019-06-18

本文共 1789 字,大约阅读时间需要 5 分钟。

2.1 iOS SDK概述

MonoTouch以iOS SDK为基础,通过开发工具MonoDevelop和它与IB的集成,增加对C#语言的支持。而且,它是基于Mono的.NET实现的,因而带来了许多类库,支持现有的代码以及垃圾回收机制。.NET开发者会觉得与Mono、MonoDevelop一见如故,但除非之前有使用Objective-C和Xcode进行Mac或iOS开发的经验,否则会对iOS SDK和它在MonoTouch中的实现感到陌生。本章将介绍iOS SDK和MonoTouch的工作原理。通过一个示例突出不同MonoTouch的设计要点。首先来认识一下iOS SDK。

如图2-1所示,iOS SDK为Objective-C语言提供了一套丰富的API和工具来开发iOS应用程序。第1章接触过几个工具,所以现在来看看API栈的构成。SDK包括使用Objective-C编写的顶层框架(如果不使用MonoTouch)以及底层不那么抽象的API,提供3D图形、套接字、音频等功能。该层一般使用C和Objective-C混合编程,这取决于要实现的功能。大多数应用程序都会使用Objective-C编写,还要结合称为CocoaTouch的顶层抽象层API,并根据需要,通过基础框架和核心图像的绘图,渗入一些不抽象的底层功能。CocoaTouch由多个框架组成,但最为主要的框架是UIKit。
注意 框架就是一个简单的软件库。从非严格的意义上来说,类似.NET中的组合体(assembly)。
UIKit包含许多用于构建iOS应用界面的类,如按钮、标签、文本框、滑块、表格、工具栏,以及页面视图或图形视图等,以上列出的只是UIKit的部分组件。
注意 如果需要UIKit或其他框架的完整参考文档,可以访问iOS开发者中心中的文档,也可以访问MonoTouch网站里的副本(在MonoTouch框架树中可找到)。
UIKit还定义了许多协议用来响应类中发生的有趣事情。协议类似C#中的接口,但不是所有的方法都要实现。只有在定义时要求实现的方法才需要实现,其他则是可选的。这一点很重要,因为它有助于理解下面将要讲述的MonoTouch设计。它的实现方式与C#中对象的接口实现相类似,这样对象就会在适当的时候调用程序。在Objective-C中协议的实现也是采取这种方式,例如,UIKit中的UIActionSheet类和UIActionSheetDelegate协议,开发人员提供一个UIActionSheetDelegate实现并提交UIActionSheet实例。假定你知道ActionSheet的哪个按钮被单击了并对其做出响应,你就得遵循UIActionSheetDelegate协议在类中执行代码,并将该类的实例的属性设置为UIActionSheet实例的委托(Delegate)属性。这样,当ActionSheet的按钮被单击时,就会调用该代码。这样设计不但UIActionSheet类可重用,还让应用程序开发实现了松耦合的逻辑。这个委托模式的例子在CocoaTouch中很常见,而且MonoTouch完全支持。
在CocoaTouch中,另一种常见的模式是Target-Action模式,该模式允许开发人员对用户与用户界面之间的交互做出响应。这就是CocoaTouch的事件(如一个按钮被触碰)响应机制。在第1章中,我们知道MonoTouch既可以使用所熟悉的、典型的C#风格的事件,也可以使用CocoaTouch风格的动作方法。Target-Action模式会将对象(目标)的方法(动作)关联到另一个对象(通常是UIControl,它是UIKit中许多控件的基类)的事件,且不需要任何子类。在Objective-C中,当用户触碰一个控件,如果该控件的目标对象包含一个特定的操作方法,那么Objective-C会在运行时利用“选择器”发送消息到动作方法。
注意 Objective-C中发送消息的方式类似于C#中的调用方式,区别在于前者是在运行时实现的。
选择器类似于函数指针,当UIControl实例触发事件时,绑定到选择器的关联操作方法就会执行。在这个方法内,可以编写处理代码。该模式非常类似于C#中的事件。在MonoTouch中,可以灵活地在两种模式之间进行选择。

转载地址:http://watkx.baihongyu.com/

你可能感兴趣的文章
jSearch(聚搜) 1.0.0 终于来了
查看>>
Java字节码结构剖析二:字段表
查看>>
盘点2018云计算市场,变化大于需求?
查看>>
极光推送(一)集成
查看>>
Android项目实战(三十九):Android集成Unity3D项目(图文详解)
查看>>
MySQL 8.0 压缩包版安装方法
查看>>
TensorFlow系列专题(六):实战项目Mnist手写数据集识别
查看>>
JS中this的4种绑定规则
查看>>
Netty Pipeline源码分析(2)
查看>>
@Transient注解输出空间位置属性
查看>>
Ansible-playbook 条件判断when、pause(学习笔记二十三)
查看>>
开发者报 | Github造假产业链曝光,花钱就能买Star;黑客又多一个可以偷你密码的方法了...
查看>>
git 相关开发常用
查看>>
编码服务正在步入云端
查看>>
程序员很平凡,但从事着不平凡的工作!
查看>>
MySql——Explain执行计划详解
查看>>
Asp.net Core中SignalR Core预览版的一些新特性前瞻,附源码(消息订阅与发送二进制数据)...
查看>>
socket编程-客户端向服务器发送字符串,传文件
查看>>
Tkonter 组件 —— Button
查看>>
C语言概念总结
查看>>