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.为方法传递数据的方式
|
|