马上着手开发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. WCF初探文章列表

    WCF初探-1:认识WCF WCF初探-6:WCF服务配置 WCF初探-2:手动实现WCF程序 WCF初探-7:WCF服务配置工具使用 WCF初探-3:WCF消息交换模式之单向模式 WCF初探-8:W ...

  2. Msbuild项目集成右键菜单编译

    DS1.背景:   我们为什么要将VS2008命令行编译.sln文件集成到右键菜单呢? 原因一:VS2008很好很强大,但太费系统资源了,尤其是在虚拟机在里面装VS2008的时候更是如此. 原因二:有 ...

  3. AndroidTouch事件总结

    1.自定义的控件几乎都要用到触摸事件,不交互怎么响应,相关的事件处理函数由dispatchTouchEvent.onInterceptTouchEvent.onTouchEvent,处理这些事件的由v ...

  4. sja1000T can相关的知识

    开发环境:硬件环境arm9200 sja1000T,软件环境kernel version 2.6.21.驱动程序:字符驱动 can有两种基本的工作模式:basic can .pelican,pelic ...

  5. Asp.net MVC路由机制

    C:/Windows/Microsoft.NET/Framwork/v4.0.30319/config/web.config-> httpModules-> System.Web.Rout ...

  6. android小技巧(二)

    一.如何控制Android  LED等?(设置NotificationManager的一些参数) 代码如下: final int ID_LED=19871103; NotificationManage ...

  7. 学习git config配置文件

    设置 git status的颜色. git config --global color.status auto 一.Git已经在你的系统中了,你会做一些事情来客户化你的Git环境.你只需要做这些设置一 ...

  8. C# Lamada表达式

    Lambda表达式 "Lambda表达式"是一个匿名函数,是一种高效的类似于函数式编程的表达式,Lambda简化了开发中需要编写的代码量.它可以包含表达式和语句,并且可用于创建委托 ...

  9. 关于linq to sql类线程同步问题

    例如,下面一段代码,当两个线程同时访问时会出现各种由于线程不同步而导致的问题,比如什么DataReader已打开未关闭啊,已经添加了重复的键啊等等. /// <summary> /// 当 ...

  10. url中

    url中汉字被转换为UTF-8,通过此网址可以解析UTF-8编码.在地址栏中输入文字或者其它的,则可能输入法或者是相关的程序进行解析. http://www.mytju.com/classcode/t ...