CS193p Lecture 8 - Protocols, Blocks and Animation
一、协议(Protocols)
1. 声明协议
@protocol Foo <Xyzzy, NSObject>
// ...
@optinal
//
@required
//...
@end
(与@interface几乎一致)
-协议只是方法的声明,没有实现部分
-协议中声明的方法必须实现
加上@optional,其后的方法可选,其前的方法必须实现
加上@required,其后的方法必须实现
-如果你要实现协议Foo,也要实现Xyzzy协议和NSObject中全部必须的方法,
2. 指定协议
// 公有指定
#import "Foo.h"
@interface MyClass : NSObject <Foo>
// ...
@end // 私有指定
@interface MyClass() <Foo>
@end
@implementation MyClass
// ...
@end
3.用协议指定变量
id <Foo> obj = [[MyClass alloc] init]
4. 协议的使用场景
最常见的是:delegate 和 dataSource
视图向控制器发消息:通过 不可视结构化通信(blind structured communication)
@property (nomatomic, weak) id <UISomeObjectDelegate> delegate;
@property (nomatomic, weak) id <UISomeObjectDataSource> dataSource;
二、块(Blocks)
1. 在其他语言中,称为闭包(closure)
2. 加上__block后,变量在块中保存的不在是变量的值,而是变量的地址,所以可以被修改;
如果加上这个修饰,此变量会从栈移到堆中,从而可以在block中使用,等block结束,再将信息复制回堆,再放回到栈上;
3. 每次向block中的对象发送消息时,系统都会创建一个指向该对象的强指针,直至block不存在
4. block表现得像对象,体现在:
- 可以被存储,如存在property、dictionary、array中
- 可以被自动引用计数(ARC)统计
- 能接受的一个消息,就是复制(copy)
5. Memory cycle
解决办法:
创建一个weak版的self,然后block中用weakSelf
__weak MyClass *weakSelf = self;
[self.myBlocks addObject:^{
[weakSelf doSomeThing];
}]
6. block的用处
三、动画(Animation)
1、UIView Animation
frame、transform、alpha
+ (void)animateWithDuration:(NSTimeInterval)duration
delay:(NSTimeInterval)delay
options:(UIViewAnimationOptions)options
animations:(void (^)(void))animations
completion:(void (^)(BOOL finished))completion;
+ (void)transitionWithView:(UIView *)view
duration:(NSTimeInterval)duration
options:(UIViewAnimationOptions)options
animations:(void (^)(void))animations
completion:(void (^)(BOOL finished))completion;
2、Dynamic Animation
UIDynamicAnimator
UIDynamicBehavior
UIGravityBehavior(重力)
UICollisionBehavior(碰撞)
UIAttachmentBehavior(吸附)
UISnapBehavior(捕捉)
UIPushBehavior(推动)
UIDynamicItem
Demo
Dropit(类似俄罗斯方块的小游戏)
CS193p Lecture 8 - Protocols, Blocks and Animation的更多相关文章
- CS193p Lecture 9 - Animation, Autolayout
Animation(动画) Demo Dropit续 Autolayout(自动布局) 三种添加自动布局的方法: 使用蓝色辅助虚线,右键选择建议约束(Reset to Suggested Constr ...
- CS193p Lecture 11 - UITableView, iPad
UITableView 的 dataSource 和 delegate dataSource 是一种协议,由 UITableView 实现,将 Model 的数据给到 UITableView: del ...
- CS193p Lecture 10 - Multithreating, UIScrollView
Multithreating(多线程) 网络请求例子: NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithStrin ...
- CS193p Lecture 7 - Views, Gestures
Views 如何绘制自定义图像 Gestures 如何处理用户手势操作 Views 1.它是基本的构造块,代表屏幕上一块矩形区域,定义了一个坐标空间,在此空间中可以绘制,可以添加触控事件: 2.它是分 ...
- CS193p Lecture 6 - UINavigation, UITabBar
抽象类(Abstract):指的是这个类不能被实例化,只能被继承: OC中没有关键词来标明某个类是抽象类,只能在注释中标注一下: 抽象类中的抽象方法,必须是public的,使方法称为public的方法 ...
- CS193p Lecture 5 - View Controller Lifecycle
1. UITextView @property(nonatomic,readonly,retain) NSTextStorage *textStorage 是 NSMutableAttributedS ...
- CS193p Lecture 4 - Foundation, Attributed Strings
消息机制 调用一个实例(instance)的方法(method),就是向该实例的指针发送消息(message),实例收到消息后,从自身的实现(implementation)中寻找响应这条消息的方法. ...
- [C2P3] Andrew Ng - Machine Learning
##Advice for Applying Machine Learning Applying machine learning in practice is not always straightf ...
- Framework for Graphics Animation and Compositing Operations
FIELD OF THE DISCLOSURE The subject matter of the present disclosure relates to a framework for hand ...
随机推荐
- bzoj 4873: [Shoi2017]寿司餐厅【最大权闭合子图】
有正负收益,考虑最小割 因为有依赖关系,所以考虑最大权闭合子图 首先对每个d[i][j]建个点,正权连(s,id[i][j],d[i][j])并加到ans上,负权连(id[i][j],t,-d[i][ ...
- jQuery EasyUI/TopJUI实现数据表格的增删改查功能(不写js,纯HTML实现!!!)
jQuery EasyUI/TopJUI实现数据表格的增删改查功能(不写js,纯HTML实现!!!) 废话不多说,直接贴上代码 <table id="configEdatagrid&q ...
- Tinghua Data Mining
Learning Resources 书籍: 期刊: 业界先驱: 开阔视野,掌握业界最新动态. 工具: 数据挖掘是很多学科的综合体: 甭管叫什么名字,归根到底都是数据挖掘: Comprehensive ...
- log4j打印错误日志输出 利用sql取出的值放在list集合中,集合中的字段类型为映射类类型
public ServiceResult<List<KefuDetail>> MaxRespondtime(Date startDate,Date endDate, Strin ...
- Java之file操作
File类既可以表示文件,也可以表示为文件夹 文件的创建.删除.重命名 1.文件的创建 File file=new File("new Hello.txt");//当前工程目录下 ...
- 渣渣菜鸡为什么要看 ElasticSearch 源码?
前提 人工智能.大数据快速发展的今天,对于 TB 甚至 PB 级大数据的快速检索已然成为刚需,大型企业早已淹没在系统生成的浩瀚数据流当中.大数据技术业已集中在如何存储和处理这些海量的数据上.Elast ...
- 流行的9个Java框架介绍: 优点、缺点等等
流行的9个Java框架介绍: 优点.缺点等等 在 2018年,Java仍然是世界上最流行的编程语言.它拥有一个巨大的生态系统,在全世界有超过900万Java开发人员.虽然Java不是最直接的语言,但是 ...
- HDU4035 Maze(期望DP)
题意 抄袭自https://www.cnblogs.com/Paul-Guderian/p/7624039.html 有n个房间,由n-1条隧道连通起来,形成一棵树,从结点1出发,开始走,在每个结点i ...
- ls参数
-a 全部文件 -A 与a差不多,但是不包括.和..开头的两个目录 -d 仅列出目录 -f 直接列出结果,不进行排序 -h 列出文件大小 -i 列出inode的位置,而非列出文件属性 -l 列出长数据 ...
- win7下如何解决协议适配器错误问题
数据库为oracle 11g,在cmd中使用sqlplus命令出现了“协议适配器错误”. 原因分析:oracle相关服务没有启动. 解决办法如下: step1:进入服务页面. 方法一:cmd → se ...