斯坦福iOS7公开课-Lesson1-4知识点小结(自用)
来源:互联网 发布:php 高内聚 低耦合 编辑:程序博客网 时间:2024/05/22 13:16
呐,顺一顺笔记本上的东西,白胡子大叔的一堂课信息量有点大的说;另外,主要是自己看的,所以…乱就不管我的事儿啦╮(╯▽╰)╭
…所以,正确的打开方式是Command+F。
Lesson1
MVC模式
slides上有两张图,把它们的关系说得很明白。不过我觉得MVC是一种说起来比较简单理解起来也很容易、但是真正上手做却是教科书习题般的难啊。
- Views do not own data they display
- Controllers interpret/format Model information for the view
- an MVC can be one of the minions of some bigger MVC
.h和.m文件
- .h:public API
- .m:private implementation
- name必须跟文件名相同
@property
在OC中,所有的对象都在堆中,都有指针指向(ARC)
- strong/weak
- nonatomic
- setter/getter method
- @synthesize:若同时修改了setter和getter方法,需重新声明@synthesize
- 重命名
Lesson2
NSMutableArray
- 是NSArray的子集
- 方法:insertObject:atIndex, addObject
- Adding nil to your NSMutableArray will crash your program
为对象分配空间并初始化
- declaring a @property: 为指针本身分配空间,但并未为其指向的object分配空间
- put the needed heap allocation is in the getter
- 所有property初始化为0(对指针来说是nil,对原始变量来说是0)
- Lazy instantiation
数组使用
- syntax sugar: self.cards[index] = [self.cards objectAtIndex:index]
- index = 0, 数组下标越界——>crash
- 良好的做法(coding style):initialize it to the default value, then set, return
- (Lesson3)firstObject方法比otherCards[0]好,因为后者可能越界(前者保证取出的元素不为nil?)
类方法与实例方法
- +: class method, no instance variables(创建事物,工具方法)
- -: instance method, send to instances of a class
getter/setter method
- 设置访问方法的名字
- 设置只读或只写,readonly,只有getter
- 语义weak, strong
- 在getter中,为object分配空间并初始化
instancetype: Related Result Type(相关返回类型)
- return an object which will be the same type as the object that this message was sent to
- 总是在init方法中使用(需要检验是否成功初始化父类:if(self = [super init])
- 对比id类型
- 只能作为返回值
- 对于init,alloc方法,以id作为返回类型,会返回类本身的类型,但类方法的返回类型,LLVM(Clang)无法判断,会出现错误
- "No visible @interface for "NS…" declares the selector …"消除该错误的方法有两种:(a)显式转换(b)使用instancetype
- 保证Complier正确推断方法返回值类型
Lesson3
readwrite
only time use: redeclare a readonly one from public to private
继承
- OC中没有protected,任何子类需要继承的,必须设为public
- 继承的方法重写,不需要添加到public API(不需要再声明一次)
designating initializer(指定初始化器)
- 需要调用super designating initializer
- 只有一个
- 如果该初始化器与父类不同,则需要将其标注出来
定义常量
- #define ……:替换
- static const:有类型,better in debugger
- @" ":创建字符串常量
outlet collection
- strong
- Complier无法知道数组中有什么
- order does not matter
- View指向array内部的东西strongly,但是并没有指向数组本身,so Controller strongly points array
Class Extension(类扩展)
@interface 类名()
//定义合成属性或方法,但不能添加字段
@end
- 所谓扩展,为一个类添加额外的方法或属性
- 扩展中,只能扩展合成方法或属性,不能添加字段
- 区别:(分类)在运行时添加到类中
- 在.m文件中声明私有方法的方式
sender
[self.cardButtons indexOfObject:sender]
//sender有序号?
Lesson4
Creating Objects
- alloc and init: most of time
- class method: +(id)stringWithFormat:(NSString*)format,…
- instance method: -(id)mutableCopy, -(NSString*)stringByAppendingString
- 返回元素:-(id)lastObject
如果方法中没有copy,那么对一个已经存在的objects,返回的都是指针
nil
send message to nil, and method will return nil.
注意:返回struct需要小心,return value is undefined
Dynamic Binding(动态绑定)
- id
- is a point to an object I don't know the object
- all objects points are id:动态绑定,运行时确定
- we use static typing a lot, check at runtime
2. Static typing
- firstObject returns an id
id
- 什么时候使用id呢?
- array中放入不同类型的对象
- 支持blind structured communication, 用指针指向未知类型的对象(View发送action给Controller必须有指向其的指针)
2. 使用id需要保护机制
- 运行时检验id
- 使用protocols: 保证其反应的类型/方法
introspection
- NSObject中的方法(三种)
- selector方法名的识别器,SEL
- respondToSelector:@selector(method's name)//如果方法有参数加入冒号即可
- 使用SEL作为参数:performSelector, performSelector:WithObject
- 在NSArray中使用:[array makeObjectsPerformSelector:shootSelector]
- 设置action(不使用ctrl拖动)
3. 什么时候需要introspection
- 返回id类型元素的时候,需要对其进行检验和cast,保证为正确类型
- mvc中的blind structured communication
Enumeration枚举
NSNumber
- 包含原始类型,以放入NSArray, NSDictionary
- @(),@数字:返回NSNumber,括号中放入原始类型
NSValue
将struct包装起来:一个方法是,将它转化为字符串,则可以将其放入数组中,用来debug。
NSData
二进制包
NSDate
处理时间显示的格式
NSSet/NSMutableSet
- 无序集合,元素只有一个
- 用处:经过hash处理,可以用来查找
NSDictionary
- All values and keys are in heap(objects).
- 创建:@{key1:value1, ……}
- 查找:
- objectForKey
- 方括号:colors[colorString]
- 键值:需要hash,isEqual,故NSString通常用来作为键值
遍历方法
for(id key in myDictionary){……}
Property List属性列表
- means:a collection of collections
- iOS中的API, 将属性列表作为参数
NSUserDefault
- 共享字典,甚至在程序启动和退出时仍然存在,很小
- 该数据库中的一切都是属性列表
- 访问:返回的是全局的
- sample methods
- 一旦得到这种实例,记得同步
NSRange
- C struct
- NSNotFound:NSUInteger, location
- NSRangePointer: NSRange*
- 在iOS中,一般不会将struct放入堆中,该指针用于引用调用range
- 如果使用NSRangePointer作为参数,使用信息填充
4. method:NSEqualRanges()
UIKit
UIColor
UIFont
- user content用户信息:区别text on button,etc
- 首选字体:样式-语义环境->用户信息
- 系统字体:按钮(除了自定义样式)
UIFontDescriptor
iOS7:将类别施加在未分类的字体上
Attributed Strings
- 除了字体本身之外,其它的一些样式信息
- NSAttributed String
3.NSMutableAttributedString和NSMutableString修改会相互追踪
- 斯坦福iOS7公开课-Lesson1-4知识点小结(自用)
- 斯坦福机器学习公开课(4)
- 公开课,算法导论笔记(自用)
- 斯坦福机器学习公开课(2)
- 斯坦福机器学习公开课(3)
- 斯坦福公开课随笔
- 斯坦福公开课随笔
- 斯坦福下学期公开课
- 机器学习,斯坦福公开课
- 斯坦福机器学习公开课
- 斯坦福iOS 7公开课-Assignment 1
- 斯坦福iOS 7公开课-Assignment 2
- 斯坦福机器学习网易公开课笔记4
- (斯坦福机器学习公开课)梯度算法
- 斯坦福《机器学习》Lesson1-3感想-------4、Logistic回归
- struts1相关知识点(自用)
- 斯坦福公开课第6课笔记
- 斯坦福《编程方法学》公开课
- Android中sqlite基本使用1,(创建数据库,升级,对数据进行增、删、改、查)
- eXtremeDB 数据类型
- 【Nginx】LNMP环境下的后续配置
- windows Mac 虚拟机显示模糊的问题
- Tomcat7.0新特性:支持Servlet3.0注解定义,无需配置web.xml
- 斯坦福iOS7公开课-Lesson1-4知识点小结(自用)
- POP3、SMTP和IMAP
- 人脸识别经典算法三:Fisherface(LDA)
- Android系统的移植要做的两个工作
- 音乐类软件LoveMusic开发(三)----登录界面
- ——————会当凌绝顶,一览众山小——————
- android颜色大全
- Linux中使用线程
- 第七次Open Workshop活动总结