A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨光0618 中级黑马   /  2016-8-27 19:37  /  773 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Mark 01  block与函数的异同点

1.block与函数
  • 相同点
    • 他们都可以封装一段代码
  • 不同点
    • block是一个数据类型,而函数就是一个函数
    • block函数声明变量,而函数是不能的
    • block可以作为函数的参数传递,函数不能直接作为另一个函数参数
2.block作为函数的返回值
  • typedef void (^newType)();

    newType test()
    {
        newType myBlock = ^{
            NSLog(@"好的好的");
        };
        return myBlock;
    }

Mark 02 protocol协议的基本使用

1.协议是串门用来写方法声明,不能写属性

  • 遵循了协议的类,这个类就拥有了这份协议中的所有方法的声明,而不用自己去定义
  • 声明一个协议
    • @protocol PHprotocol <NSObject>
      方法的声明
      @end
  • 协议中可以写@property,但协议中的@property只会生成getter和setter方法的声明
  • 类遵循协议
    • 如果一个雷想要拥有某个协议中的所有方法的声明,只需要遵循这个协议即可
    • 遵循协议的格式
      • @interface PHPerson : NSObject <PHprotocol>

        @end
      • :是继承
      • <>是协议
    • 类遵守一份协议,这个类仅仅是有了这份协议中的方法的声明,不会自动实现,所以需要自己实现
    • 如果遵守协议,但没有实现协议中的方法,编译器在编译的时候不会报错,仅仅给出一个警告
    • 在执行的时候,如果调用这个协议的方法,而没有进行在类中实现,那么就会报错
    • 如果父类遵守了某个协议,那么父类下的子类全都继承此协议

Mark 03 协议多重遵守

1.多重遵守协议的语法
  • @interface PHPerson : NSObject <PHprotocol,PHagreement>

    @end
  • 多个协议之间用逗号隔开
  • 这时这个类中同时拥有了两个协议中的方法的声明

Mark 04  协议的@required和optional关键字

1.用来修饰协议中的方法
  • @protocol PHprotocol <NSObject>
    @required
    - (void)saiHi;

    @end
  • 如果协议中的方法是被@required修饰,类中若没有对此协议中方法进行实现,那么编译器会报一个警告
  • @protocol PHprotocol <NSObject>
    @optional
    - (void)saiHi;

    @end
  • 如果遵循此协议的类没有对@optional修饰的方法没有进行实现,那么编译器连警告都没有
  • 这两个参数没多大的作用,主要是程序员之间的沟通
  • 协议默认是@required
Mark 05 协议与协议之间可以多继承

1.如果一个类遵守了某份协议,就相当于拥有了这份协议以及其父协议中的所有方法的声明

2.Foundation框架中有一个NSObject协议,NSObject类遵循NSObject协议

3.所有协议必须直接或间接的从NSObject基协议继承

Mark 06 协议  延展  分类的比较

1.分类
     将一个类分为多个模块,用来为一个类添加方法
2.延展
     专门用来私有化类的成员
3.协议
     定义一份协议,可以让其他的类遵守这个协议,遵守之后,类就拥有协议中的方法的声明
4.继承
     子类继承父类,就拥有父类中的所有成员

Mark 07  协议的类型限制

1.id<SportProtocol> id1;
  • 这个时候,id指针要求指向的对象必须遵守SportProtocol协议,否则会有一个大大的警告
2.id<SportProtocol,StudyProtocol> id2;
  • 这时,id指针要求指向的对象必须遵守多个协议,否则会有一个大大的警告
3.Person<SportProtocol> *p1;
  • 这个指针可以指向任意的Person对象,这个指针指向的对象必须遵守A协议,如果没有,则编译器会发出警告
4.为什么要做类型限制?
  • 只有遵守了协议的类,才100%拥有这个协议中的方法,后边要调用这个对象的协议方法,为了保证 这个对象中一定有这个方法,所以要求指针指向的对象要遵守协议

Mark 08  代理设计模式

1.为方法传递数据的方式
  • 参数
    • 少量的参数,和数据
  • block
    • 传代码
  • 代理
    • 大量参数和数据


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马