zoukankan      html  css  js  c++  java
  • CS193p Lecture 8

    一、协议(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(类似俄罗斯方块的小游戏)

  • 相关阅读:
    L1-050 倒数第N个字符串 (15分)
    Oracle存储过程的疑难问题
    Linux的细节
    Linux字符设备和块设备的区别
    Shell变量
    游标的常用属性
    Oracle中Execute Immediate用法
    Oracle中的sqlerrm和sqlcode
    Oracle把一个表的数据复制到另一个表中
    Oracle的差异增量和累积增量
  • 原文地址:https://www.cnblogs.com/mobilefeng/p/4545051.html
Copyright © 2011-2022 走看看