ios基础开发

备注: 所有笔记均与老师ppt相对应。 

第一篇: 关于 view controller

ppt1:

model:持久化保持状态的部分

view: 直接和用户打交道

controller: 传递与储存数据 承上启下

view用delegate传信息给controller(data owner, file source)

MVC具体会在设计结构的课程里讲述

之间起到 单项作用 若耦合

ppt2: 各种框架的选择

cocoa本来是用来给小孩子的玩玩

MVC的弊端: GUI中程序琐碎 10个object-> 10 presentation

-> MVP  ( model - view - presenter)  UILogic 中加入自动化UIStates  取出一部分和界面相关的data binding

-> M-V-VM (model - view - view model) 双向的data binding

问题: 数据间的关系 难以表达 尤其在三维动画中体现完全

->FRP(functional reactive programming) 用数据流, 中间搭建好关系(map),就可以自动的反应了 (微软)

MVC是一切的基础

ppt3:

UIViewController 实质 就是一个 API(Application Programming Interface应用程序编程接口)

viewcontroller 可以 管理view + 传递数据(多个界面的controller之间也需要传递)+适应设备(旋转补偿etc)+。。。。

viewcontroller的结构是一个树

ppt4: 创建rootViewController 的过程

info.plist

本身会自动帮忙load界面 loadMainStoryboard…

若这个函数被删去 则可以通过uiapplicationdelegatedidFinishLaunch来 也就是调用手写的代码

若我们手工不写的话 则会黑屏, 因为没有uiwindow了

window是UIwindow的一个实例

前面是 view 后面的 就是window

UIMainStoyuboardFile NSMainNibFile 分别有两个主界面

之前就是用代码完全创建view controller

window

UIWindow(一切可视化界面的起点) - UIview

[实验尝试]得

若mainstoryboard后面的value没了或直接删去整个storyboard 界面也会由蓝色变为黑色

若mainstoryboard后面的value放了错误的东西  界面也会由蓝色变为白色 然后会出现如图所示的错误

把mainstoryboard删掉 手动创建它 但是不给他viewcontroller

这个代码会在练习说明里面提供

viewcontroller怎么拿到他的东西呢?

nibname的可能性

默认的话 viewcontroller 从 storyboard 来, 那么nib已经嵌入其中

若自己用程序写 则按照

若什么都没有 就会调用existingNibNameMatchingClassname

练习:

把对话框中的 1,2,3,4,5,6 都去试验一下

用断点或者NSLog来理解viewcontroller的 lifecycle

展示的每个viewcontroller都需要上手练一遍

注意: 以uicontroller大头的不会自动寻找nib

viewdisappear可以放部分的信息 但不要放太多

把UIviewcontroller的文档要看一遍

ppt5:

viewcontroller会尽量推迟view的加载

通常当自己变成主窗口的时候才会开始阅读

自己写的代码 就会 调用 loadcontroller

自定义的loadview 是不会调用supercontroller的

如果有UI view controller 大头的 注意系统根本不会去加载后面的内容咯

ppt6:

life circle

will-did

viewWillDisappear:  清理工作

ppt6: view presentation每个人都要去写一遍

用-presentviewcontroller:

用来传递数据

uimodelpresentationFormSheet: 邮件

uimodelpresentationcurrentcontext: 分屏工作

建议还是用来看文档比较好

showviewcontroller: ios8 之后就有了 建议也去模拟一下子

如何回传数据: 后一步-》前一步:

前一步 delegate -》 后一步

后一步传消息 -> delegate -> 前一步dismiss




第二篇: 关于storyboard

打开viewcontroller的sourcecode 我们会发现它也是一个xib也就是nib文件 但是它和普通的view controller又不一样 它放的是一个场景(scene)

注意缩小的情况下无法编辑这个场景, 需要双击进入才能够编辑

一个storyboard是一个故事

如果没有把第一个view删去的话,nib会默认为先调用这最初的view 而不是viewcontroller的名字

storyboard上3个按钮的含义 从左到右依次为:

view的名字 + 上面第一个响应的事件 + 。。。

除了用按钮去触发之外 还可以选择用直接在导航栏拖动

要把UIstoryboard 的 reference也看一看



第三篇: 关于life cycle

ppt5:

在做appdelegate 中 图示的程序是非常值得学习的

NSStringFromClass([AppDelegate class])

与直接放上 AppDelegate 其实是等价的,

可是图中的方法更好,因为它可以保证你后续的appname改变的话,在这里也会自动跟着改变的。

ppt6:

关于port mac, event queue, main run loop (不断的循环,来侦探有的触摸等 用户行为) 都是mac系统已经帮我们准备好的 我们要做的就是 通过viewcontroller来规定遇到了这些行为我们要去做些啥子

解释一个概念 runloop mode: 就是指 一组数据源

runloop就是为了侦探信息来发给我们的主线程用的。

ppt7:

注意在 willFinishLaunchingWithOptions (尽量在这里去做初始化)里面要放应用级的初始化工作,但是不要做很多太耗时的工作

如果需要做的话,用dispactch cue 开一个ebool的线程来完成会更好一些

/*

当UI界面的临时状态还没有恢复,并且我们希望做一些应用级的初始化工作时,可以放到以下哪个方法中:

A. -(BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions

• B.- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptionsC.- (void)applicationWillEnterForeground:(UIApplication

D.- (void)applicationWillTerminate:(UIApplication *)application

应该选择A

*/

界面的状态已经恢复过了,但是UI 还没有放到屏幕上,进入了inactive状态。

inactive也就是说代码在执行,但是界面上看不见,用户的动作不会被响应

-> didFinishLaunchingWithOptions 这里可以去看看 有哪些options(分别对应了各种稀奇古怪的打开方式)

app programming guide for iOS

preserving your app’s visual appearance across launches 有详细的解释

要想真的很好的完成ios开发 还需要去阅读很多。

-》 applicationdidbecomeActive

这样用户就进来啦!!

此刻若打进来电话,或着按了home按钮

-> applicationWilllResignActive

我们去做一些保护线程

-> applicationDidEnterBackground

这个只会有5s(系统说),实际大概为100s。如果需要更长的可以申请更长的 (startgroundTimeRemaining 大概10min)

ps: 后台运行程序和这里的不一样,比如高德地图,音乐软件啥子的,这个自己去看吧(见app programming guide for ios)。

因为内存不够啥子的,而且还没有被suspend(比如5s后就随时有可能被suspend)

-> applicationWillTerminate

所以千万不要在这里做一些关键的动作。

若回复活

applicationWillEnterForeground

会在调用app delegate后发出同名的ui notification 这样系统中除了app delegate的部分也可以去访问这个事件。

ppt8:

移动应用的特点: 启动 - 使用 -中断 -恢复

用户正在你的程序 滚动下来 找图片,然后一个电话打进来。 UI状态的保持

用调试的一个常见方法: NSLog(@“will finish launching”);

21’ 开始讲解 在边栏上可以设置断点

断点中如果需要跟踪某个变量可以利用 filter, add, 或者

右下角窗口的go self.window.rootViewController

+ add symbolic breakpoint

swift breakpoint

except breakpoint (特殊异常错误)

test failure breakpoint(只在没法运行的时候的时候)

debugger  command

log message也是可以的

汇编语言中需要注意的其实只是 callq 意思是调用了q这个函数

idapro 对于汇编语言弄的熟悉的人 可以用。

接个设备去调试会好很多哟~

练习:

xcode的每个调试功能 选择: 用符号断点,来看一下uikey的内部具体内容

nslog

观看: iOS调试实战

http://e.gensee.com/v_72a754_6


第六篇: 关于navigation bar

1, 要有统一的设计风格,要让顾客在固定的地方做固定的事情

2. navigation bar(又叫面包屑)最常用的界面跳转控制, 最经典的可以在我们的setting里面找到。

3. 这个只会有上一步 - 下一步,

而不像网页那样所有的网站都会有

因为有uinavigation controller

navigationitem 形式: 左(上一个)+中(title)+右(下一个)

第二课:

-ppt5: navigationbar 结构

1. 需要理解的是navigationbar 管理的是 navigationitem

2. push/pop的都是item

ppt6:

所有能显示的item都是继承自uibaritem

enabled 若为false 就是灰掉不能点的那种

title<>image 文字题目<>图片题目

tag: 所有的界面都有的这种tag 有多个的那种(尤其是同类型的)可能需要区分 于是特别需要tag

imageinsets: 定位的时候会用到的

uibaritem 首先是一个button(就是有action, target的特点)

-initwithbarButtonSystemItem: target: action  -system

-initWithCustomView (大概的action就没了)  -自定义的

Custom: 意思是自己添加

ppt7:

除了navigation bar 还有tool bar

ps:  实践

插入图片的话 可以不放在catalog里面而是放在preview里面,除了imagename的方法还有mainbundle里面找到图片的ui号码,以免把所有的东西都存在系统的图片缓存里面。

放在Project里的图片可以用imageByName的方法访问,也可以用mainBundle找到图片的URL来访问.



补充: 键盘遮挡问题

ios基础开发_第1张图片

你可能感兴趣的:(ios基础开发)