斯坦福的iOS7公开课,在网易公开课上学习这门课,一共18集,希望每天我能在这里记录下我的学习步伐,记录学习心得。
如有不当之处。请指点我这个小渣渣。
/* 这是一段注释 好久没写了,又回顾一遍,写写心得体会。*/
How to build cool apps
第一节课由白胡子老头讲解如何构建一个应用
讲解斯坦福学习这们课程的一些必要条件,(不得不佩服国外的学校,学习开发的需要一些基础课程,反观我天朝,培训机构,学校,任何人都可以从零学习开发)这是好是坏呢
每周还有作业 。。通过概念将例子,学生们都是通过概念来做,我们学会的只是如何百度。。。。
好 了, 废话不多说。Let's GO!
不过不论名牌大学还是野鸡学校,老师只是引路人,剩下的还是要多多的靠自己。
虽然有中英文字幕,但有些概念还是要注意下英文字幕
1.what is in ios?
iOS中有什么,简而言之,iOS系统由什么组成,有什么样的组织架构?
何为框架 framework?
框架是一个目录,里边包含.h文件和资源文件构成了framework,framework即是动态库也是静态库,在iOS中,系统的framework是动态库,自己创建的是静态库,有关静态库和动态库,可以看我其它文章详解。每个框架对应iOS系统的每一层,每层建立在它下层的上面,尽量使用上层框架代替下层框架,更高层次的框架是对底层框架对象的抽象。
Cocoa Touch 触控应用层 也是UI层 , 如UIKit对应这个层,是开发者接触最多的一个层。Cocoa touch 是 Cocoa的触控版本
Media 媒体层 一些影音高级自定义处理 应用这个层比较多。
Core Serivce 核心操作系统层
Core OS 接近硬件,基于BSD 的Unix系统 ,大多数API 都是用c写的
2. Platform Components 基础知识
- Tools xcode5(现在我的用版本是7.2)
- Language Objective-c
- Frameworks Foundation UIKit CoreData CoreMotion MapKit
3. Design Strategies 设计模式 MVC设计模式
设计模式简单说,就是将工程中所用到的类合理组织与使用的策略;
合理分配归纳到下边这三个模块中
M model 视图所需要的数据,e.g label上的文字
V View 构建视图的类,e.g button, switch ,label...
C Controller 连接视图与模型的类,二者的媒介,e.g c将label需要的数据从m取出来,填充到label上,将label显示出来;
MVC三者如何通信?
view和model 严禁相互通信,必须相互独立。
模型完全独立于UI,不能同视图这一块中的对象进行沟通
控制器到视图的通信方式 ,控制器完全知道视图的行为,将视图作为控制器的一个属性 e.g outlet
//声明了button的输出口,可以设置它指向xib中任何的Button,通过button可以知道所有的相关属性和行为;
@property (nonatomic,retain) IBOutlet UIButton *button;
视图到控制器通信方式
- 目标动作机制 taget-action 这是一种 “盲”的方式,视图是通用的,出发视图的行为来通知控制器;控制器本身有一个目标方法(target),然后将这个目标给视图的行为方法(action),当视图中触发这个行为时,视图会发送消息给控制器的目标告诉控制器有人对他进行了操作。比如按钮的点击事件、滑动条的滑动事件。e.g 点击按钮 通知控制器来执行一些事情,如页面跳转和网络请求,刷新UI等;
*委托机制 delegate 将一些视图不能自己处理完成的事情委托交给控制器来处理,因为控制器说全局的掌控者,e.g 滚动视图问控制器,我可以滚动吗?should 是否可以滚动, will 将要,did 已经 等,这一些状态由控制器告诉滚动视图;视图本身回答不了这些问题, 把这些问题交给其他对象,不知道这个对象,只知道这个对象可以回答这些问题;
*数据源机制 data source 视图让控制器给它将要显示的数据,有待深入研究!
视图不该持有它的数据,数据源应该在模型中,与UI无关~
.模型到控制器的通信方式
- KVO 键值观擦
与通知一样,在控制器中注册成为观察者,实现回调方法,在模型发生改变的时候可以通过激活回调方法让控制器做出一些动作。
- Notification 通知
模型数据改变了,广播信息,控制器接受,,类似于电台
现在的我已经在做iOS开发2个月了,还属于提升阶段。今天的第一课,白胡子老头讲了一些基本的语法,比如属性的使用,定义方法,等。
//一般来说,控制器中会注册成为监听者
- (void)addObserver:(id)observer selector:(SEL)aSelector name:
//当模型中的值发生改变时,模型会发出通知
- (void)postNotification:(NSNotification *)notification;
- (void)postNotificationName:(NSString *)aName object:(id)anObject;
一些零散的知识
.h public API
.m private API 以及所有实现
内存管理
属性的修饰符,相当于一些代码的开关,
不一样的修饰符,属性的getter和setter方法的内容也不一样;
strong 和 weak
我对内存的一些见解 举个例子🌰
@property (nonatomic,strong) NSObject *obj;
// like as
obj = [[NSObject alloc] init];
//obj 是一个指针, 它 指着 [[NSObject alloc] init]分配的这块对象; 这个对象, 一般我们说obj是一个对象, 这个说法并不完全准确。 希望大家搞清楚对象 与指针 obj 这个指针是在内存空间中栈内存在的, 它的值存着堆内对象的地址 [[NSObject alloc] init]; 也就是这个。
这个是 __ obj __ 是一个指针,被strong修饰, 只要有被strong修饰的指针指着这个对象, 这个对象的引用计数就不会为0,也就不会被释放。 stong是可以修改引用计数的一个关键词。
weak 被这个修饰词所修饰,当对象没有强引用时,释放内存并会自动置为nil;