马上着手开发IOS应用程序

创建第一个单视图应用

main 方法


int main(int argc, char * argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}

创建了两个重要初始化组件

1 : UIApplication 类的实例 --》 应用程序对象

2 : AppDelegate 类的实例 --》 应用程序委托

委托中包含了 window单一属性,继承与 OSX 而来。

实现中的方法为默认,会在恰当的时机自动触发,无论删除与否。

创建IB文件,IB文件与Iphone实际大小不符解决方法:

InterfaceBuilderDocument 中 UseSizeClasses 复选框

需求分析要点

*** 1:将概念转化为设计并实现该设计 ***

*** 2:事件驱动编程 ***

关于面向对象

1、一切均为对象

2、类是对象的蓝图(类定义了对象的行为与属性)

人的行为有 睡觉、吃饭、写代码

人的属性有 身高、体重、写代码

	创建特定类的实例来新建对象
途径就是为对象分配并初始化

3、对象通过消息发送

在Objective-C术语中,一个对象通过调用另一个对象的方法来向对象发送消息。

[somePerson sayHello];

左侧的引用somePerson是消息的接收者,右侧的消息sayHello是调用其方法的名称,--》执行这段代码时 会向somePerson发送sayHello消息

4、协议??

定义交互

1.导航控制器 管理的一组视图控制器称为导航栈

2.过渡方式包括 Push(目的视图控制器添加到导航栈)、Modal(模态方式显示另一个控制器)、Custom(UIStoryBoaedSegue子类化)、Unwind(反向导航)

3.采用Auto Layout布局约束

4.创建场景注意初始化场景指示器 --->应用程序启动时载入的首个场景

5.MVC图示 ![MVC icon](https://developer.apple.com/library/ios/referencelibrary/GettingStarted/RoadMapiOSCh/Art/ModelViewController_c_2x.png =380x125)

6.在串联图(IB)中构建的每个内容视图层次均需要一个对应的视图控制器来管理界面元素&执行任务响应用户的交互操作。视图控制器最主要的作用是响应用户输入

7.视图控制器与串联图中的视图通信方法--》ActionOutlet

8.操作(Action) 是与应用程序中可能会发生的某类事件链接,该事件会触发此代码段。定义方法是使用IBAction返回类型和sender参数来创建并执行。

- (IBAction)restoreDefaults:(id)sender;

sender参数指向负责触发操作的对象;IBAction返回类型与void类似,表示该方法是一种操作。

9.输出口(Outlet) 可以从代码文件引用界面中的对象(添加到串联图的对象),按住Control将特定对象拖至视图控制器即可创建,即为视图控制器中的文件创建属性,可通过代码在运行时来访问并操控该对象。

Outlet被定义为IBOut属性

@property (werk,nonatomic) IBoutlet UITextField *textField

10.控制(Control) 即用户界面对象(按钮、滑块等),用户可以操控他们来与内容进行交互等操作,代码可通过控制来接收用户界面的消息

用户与控制进行交互会创建用户事件,常见的事件类型如 触碰和拖移、编辑事件、值更改事件。

定义交互时,应了解与应用中每个控制相关联的操作,然后明确向用户展示应用中控制的操作。

11.导航控制器(UINavigationController),应用中多个内容视图层次进行切换,即可使用导航控制器,导航控制器管理一系列视图控制器向前和向后切换的操作.

导航控制器管理的一组视图称导航栈<栈特性>,添加到栈的第一个项目为根视图控制器,永不会从堆栈中弹出,其他视图控制器可被压入或弹出导航栈

导航控制器不仅管理内容视图控制器的显示方式,还负责显示自己的自定视图,包含一个返回按钮和其他可以自定的按钮,添加到导航栈的每个视图控制器都会显示这个导航栏

导航控制器会提供返回按钮并实现操作,但需要手动将视图控制器压入堆栈中

12.使用串联图来定义导航

通常情况,串联图由一系列场景组成,每个场景表示一个视图控制器及其视图层次。场景由过渡连接

源视图控制器--*过渡*-->目的视图控制器。

几种过渡类型:

  • Push 将目的视图控制器添加到导航栈,只有源视图控制器与导航控制器连接时才可使用。

  • Modal 就是一个视图控制器以模态的方式显示另一个控制器,需用户在显示的控制器上执行某种操作,然后返回到应用程式主流程。Modal不会添加到导航栈,通常被认为是所显示的视图控制器的字视图控制器

  • Custom 可以通过将UIStoryboardSegue子类化定义自定过渡。

  • Unwind 通过向后移动一个或多个过渡,让用户返回到视图控制器的当前实例,可以实现反向导航。

串联图

1.采用Auto Layout

使用约束规则描述意图,应当如何放置一个元素以及与另一个元素相关联、元素应有的大小等。

在画布上,按住Control向四个方向的顶部(父视图)分别拖拽,停止拖移操作时,选取“Top Space to Top Layout Guide”创建间距约束。

2.创建第二场景

将想要添加的视图控制器拖至串联图(IB),可能需要将新场景设定为初始场景。可以选择“Is Initial View Controller”复选框,也可以将初始化场景指示器拖到目标视图控制器。

3.在表格视图中显示静态内容

在Attributes中 Content的弹出式菜单中选择StaticCells

Push导航设计用于深层次界面,即无论用户选定哪一项,都能为其提供更多相关信息。

添加项目是一种模态操作,即用户执行某个完整且自包含的操作,然后从场景返回到主导航,此类表述方式为modal过渡

4.创建自定视图控制器

将类识别为某个场景的视图控制器。在ViewController中的Identity检查器中,打开“Class”选项的弹出式菜单,选取自定义类。

5.跳转过渡以返回

unwind过渡,此过渡允许用户从一个给定场景返回上一个场景,并提供位置添加代码,以在用户导航切换场景时执行。

通过向目的视图控制器(要跳转的视图控制器)添加方法,创建unwind过渡。可以跳转到的方法必须返回一个操作(IBAction),并且在串联图过渡(UIStoryboardSegue)中作为参数采用。

在接口文件(.h)中

 -(IBAction) unwindXXX:(UIStoryboardSegue *)segue;

在实现文件(.m)中

 -(Action) unwindXXXX:(UIStoryboardSegue *)segue
{ }

跳转操作命名为目的位置,让操作返回的位置一目了然。

若要创建unwind过渡,通过源视图控制器场景台中的“Exit”图标,将按钮链接到unwindXXXc:操作

表格视图有两种获取数据的方式,即静态获取或动态获取。当表格视图的控制器实现所要求的UITableViedDataSource方法时,表格视图将向其视图控制器请求数据以进行显示,不管IB中是否配置了静态数据。

整合数据

应用程序的数据模型由数据结构和自定业务逻辑组成;自定业务逻辑是让数据保持一直状态所必要的。

1.模型设计

如果储存的数据很小,Foundation框架是最佳选择。如果数据模型不紧要存储数据,还要求自定业务逻辑,可以编写一个自定类。

  • 需要存储哪种类型的数据;
  • 可以使用哪种数据结构;使用框架 or 定义自定功能类
  • 如何将数据提供给用户界面;模型不应直接与界面通信

2.模型实现

开发数据模型,最重要目标是能正常运行,开始实现之后,要勇于反复重做和改进模型。

使用设计模式

1.目标-操作

特定事件发生时,一个对象会向另一个对象发送消息。操心信息就是在源代码中定义的选择器,目标(即接受信息的对象)则是能够执行该操作的对象(通常为视图控制器)。发送操作信息的对象通常为控制。

2.委托(?)

应用程序中的一个对象代表另一个对象,或者与另一个对象协调工作。授权对象保留对另一个对象(委托对象)的引用,并适时向委托对象发送信息。该信息会告诉事件的委托对象,授权对象即将处理或刚处理了某个时间。委托对象可能会对该信息作出如下响应:更新其本身或应用程序中其他对象的外观或状态,在某些情况下,他会返回一个值来反映待处理的事件该如何处理。

处理Foundation

Foundation框架包括表示基本数据类型的值类(字符串和数字)以及用于储存其他对象的集(conllection)类。

1.值对象

值对象指封装了基本值且提供了与该值相关的服务的对象。

可以从基本类型的数据创建值对象。之后可通过代码从该对象访问被封装的数据。

int n = 5;
NSNumber *number = [NSNumber numberWithInt : n];
int y = [number intValue];

大多数值类会通过声明初始化程序和类工厂方法来创建实例。类工厂方法由类实施,作为提供给客户的简单方法;它将分配和初始化结合为一个步骤,并返回已创建的对象。

2.集对象

Objective-C代码中的大多数集对象都是一种基础集类(NSArray、NSSet和NSDictionary)的实例。这些类用于管理对象组,因此要添加到集(collection)中的任何项目都必须是Objective—C类的实例,如果要添加标量值,就必须先创建合适的NSNumber实例表示。

添加进集的任何对象的生命周期都将不短于集。因为集类会使用强引用来跟踪其内容

3.数组

数组用于表示有序的对象列表。如果要保持数组中的顺序,每个元素都应储存在从0开始的索引中。

  • 创建数组

    根据对象的数量不同,可用的初始化和工厂方法也不同

      +(id)arrayWithObject:(id) anObject;
    +(id)arrayWithObjects:(id)firstObject,..;
    -(id)initWithObjects:(id)firstObject,..;

    由于arrayWithObjects和initWithObjects方法都采用以nil结束且数量可变的参数,所以必须包括nil并将其作为最后一个值。如果所提供的其中一个值为nil,则有可能使项目列表意外截断。

  • 排序数组对象

    NSArray 类提供了多种方法对其收集的对象进行排序。由于 NSArray 是不可变的,因此这类方法都会返回新的数组,并在其中包含排好序的项目。

    例如,您可以通过在每个字符串上调用 compare:,对字符串数组进行排序。

4.集合

集合对象与数组类似,只是其中包含的是各种无序的对象。所以测试成员资格时,集合比数组更快。

5.字典

字典会储存与给定键相关的对象,用于以后的检索,最佳实践是字符串对象用作字典键,其他对象也可以用,但是每个键都会被拷贝供字典使用并且必须支持NSCopying。

6.使用NSNull表示nil

在Objctive-C中,nil表示“无对象”,因此不能将nil添加到集类,如果要在集类中表示“无对象”,应使用NSNull类。

	NSArray *array = @[@“String”,@42,[NSNull null]];

编写自定类

IOS的“时钟”应用程序中的“世界时钟”标签,比起标准表格视图单元格,此表格视图中的单元格需要显示更多内容,可以扩展UITableViewCell的行为来扩展内容。

1.声明并实现类

类的说明需要两个不同的部分:接口和实现。接口准确指定了一个给定类型的对象,如何专用于其他对象。这个实现包括的可执行代码,涵盖了接口中声明的每个方法。

2.储存对象的数据的属性

属性声明在接口文件内部。如下所示:

@interface ToDoItem : NSObject;

@property NSString *itemName;
@property (readonly)NSDate *creationDate; @end

其中creationDate这个属性不可更改。如果属性是私有的,将其声明放在实现文件顶部的类扩展中。

3.方法用来定义对象的行为

可以将方法添加到类接口,在类实现中实现该方法的行为。

方法名称前面的(-)代表他是实例方法,可以用该类的对象调用。类方法用(+)表示,类方法可通过类本身调用。类方法的常见示例是类工厂方法。

4.方法参数

通过名称引用带一个参数的方法时,冒号将作为方法名称的一部分,如果方法有多个参数,那么它会被分解,并插入参数名称。

5.实现方法

与属性一样,方法也可以是私有的或者公共的。

Objective-C、Foundation框架与Xcode部分结束。

IOS开发官方文档随笔的更多相关文章

  1. iOS开发官方文档汇总

    程序员的学习过程是无止境的,程序员学习的途径是多样的.可以从视频教程中领悟,也可以从他人的代码中 理解.但当我们专注于某一个平台在开发的时候,对于某个API使用或者功能实现有疑问,通常简单的测试可以让 ...

  2. 微信小程序开发官方文档解读

    创建页面 在这个教程里,我们有两个页面,index 页面和 logs 页面,即欢迎页和小程序启动日志的展示页,他们都在 pages 目录下.微信小程序中的每一个页面的[路径+页面名]都需要写在 app ...

  3. ios学习笔记第四天之官方文档总结

    start developing ios app today. 官方文档的体系结构为: 各层的主要框架图: objectice-c是动态语言 Objective-C 为 ANSI C 添加了下述语法和 ...

  4. 【一个iOS官方文档错误】关于keyWindow是否可以接受触摸事件?

    [一个iOS文档错误]关于keyWindow是否可以接受触摸事件?   关于keyWindow,官方文档有一个解释: 同一时间只有一个window可以成为keyWindow,keyWindow可以接受 ...

  5. citus 多租户应用开发(来自官方文档)

      citus 官方文档很不错,资料很全,同时包含一个多租户应用的文档,所以运行下,方便学习 环境准备 使用docker-compose 运行,同时集成了graphql 引擎,很方便 docker-c ...

  6. Protocol Buffers官方文档(开发指南)

    本文是对官方文档的翻译,然后截取了一篇非常优秀的文章片段来帮助理解,本人英文水平有限,基本都是直译,如果有不理解的地方请参考英文官方文档,参考的文章链接在文章末尾 protocol buffers简介 ...

  7. 《SpringCloudDubbo开发日记》(一)Nacos连官方文档都没写好

    背景 现在的微服务框架一般分dubbo和springcloud两套服务治理体系,dubbo是基于zookeeper为注册中心,springcloud是基于eureka作为注册中心. 但是现在eurek ...

  8. 【pytest官方文档】解读- 开发可pip安装的第三方插件

    在上一篇的 hooks 函数分享中,开发了一个本地插件示例,其实已经算是在编写插件了.今天继续跟着官方文档学习更多知识点. 一个插件包含一个或多个钩子函数,pytest 正是通过调用各种钩子组成的插件 ...

  9. Kotlin开发语言文档(官方文档)-- 目录

    开始阅读Kotlin官方文档.先上文档目录.有些内容还未阅读,有些目录标目翻译还需琢磨琢磨.后续再将具体内容的链接逐步加上. 文档链接:https://kotlinlang.org/docs/kotl ...

随机推荐

  1. RMAN 前期准备工作和实例

    理解恢复目录,RMAN可以在没有恢复目录(NOCATALOG)下运行,这个时候备份信息保存在控制文件.保存在控制文件的备份信息是很危险的,如果控制文件的破坏将导致备份信息的丢失与恢复的失败,而且,没有 ...

  2. scala 宏

    Scala开发团队正在将实验版宏指令加入到即将发行的2.10版中.Scala宏指令提供了编译时元编程的高级形式.Scala宏网站描述道: “宏指令显著简化了代码分析和代码生成,这使得它们成为处理大量现 ...

  3. CentOS6.5 下安装 texlive2015 并设置 ctex 中文套装

    0 卸载旧版本的 texlive 0.1 卸载 texlive2007 如果系统没有安装过texlive,则跳过第0步. 可以在终端中使用如下命令查询本机已经安装的tex和latex版本: [She@ ...

  4. 手机客户端UI测试常见的测试点

    1.各种分辨率下,显示正常.现市场上主流的塞班V3系统手机为240*320.320*240.WM系统主要为240*320.320*480.Android系统主要为320*480,Iphone系统为32 ...

  5. python网络编程【三】(网络服务器)

    建立一个服务器需要以下4步: 1.建立socket对象. 2.设置socket选项(可选的) 3.绑定到一个端口(同样,也可以是一个指定的网卡). 4.侦听连接. 下面代码片段可以实现这些功能: ho ...

  6. 如何理解和熟练运用js中的call及apply?

    改变this指向 要先明白存在call和apply的原因,才能记得牢一点: 在javascript OOP中,我们经常会这样定义: function cat(){ } cat.prototype={ ...

  7. 使用Crowd2.7集成Confluence5.3与JIRA6.1,并安装、破解及汉化,实现单点登录【原创】

      鉴于目前没有针对Crowd.Confluence.Jira安装.集成和破解最新的方法,总结今天安装.破解及集成的经验,编写此文,方便大家进行配置也方便自己以后参考.此文参考多篇破解文章,并经过作者 ...

  8. equals和“==”

    Integer a = new Integer("3"); Integer b = new Integer(3); System.out.println(a==b); System ...

  9. C# UdpClient使用Receive和BeginReceive接收消息时的不同写法

    使用Receive(同步阻塞方式), 注意使用同步方法时,需要使用线程来开始方法,不然会使UI界面卡死 IPEndPoint RemoteIpEndPoint = ); UdpClient udpCl ...

  10. Jacoco入门

    Jacoco介绍 转自:wangmuming 的博客 Jacoco是一个开源的覆盖率工具.Jacoco可以嵌入到Ant .Maven中,并提供了EclEmma Eclipse插件,也可以使用JavaA ...