------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
Block的掌握
1、如何定义block变量
int (^sumBlock)(int , int);
void (^myBlock)();
2、如何利用block封装代码
^(int a, int b)
{
return a+b;
};
^(){
NSLog(@"----");
};
^{
NSLog(@"----");
};
3、block访问外面的变量
*block内部可以访问外部的变量
*默认情况下,block内部不能修改外面的局部变量
*给局部变量加上__block关键字,这个局部变量就可以在block内部修改
4、利用typedef定义block类型
typedef int (^ MyBlock)(int , int);
MyBlock b=^(int a, int b) // 利用MyBlock类型定义block变量
{
Return a-b;
};
代码:
int main()
{
int a = 10;
__block int b = 20;
void (^block)();
block = ^
{
NSLog(@"a=%d",a); // block内部可以访问外部的变量
// a = 20;// 默认情况下,block内部不能修改外面的局部变量
b = 25; // 给局部变量加上__block关键字,这个局部变量就可以在block内修改
};
block();
return 0;
}
@protocol 协议
1、协议的定义
@protocol 协议名称 <NSObject>
// 方法声明的列表
@end
2、如何遵守协议
1>类遵守协议
@interface 类名 : 父类名 <协议名称1, 协议名称2...>
@end
2>协议遵守协议
@protocol 协议名称 <其他协议名称1, 其他协议名称2....>
@end
3、协议中方法声明的关键字
1>@required(默认) 要求实现,如果没有实现,会发出警告
2>@optional 不要求实现,没有实现不会有警告
4、定义一个变量的时候,限制这个变量保存的对象遵守某个协议
类名 <协议名称> *变量名; id <协议名称> 变量名;
NSObject <MyProtocl> *obj; id <MyProtocl> obj2;
5、@property中声明的属性也可以做一个遵守协议的限制
@property (nonatomic , strong ) 类名 <协议名称> *属性名称;
@property (nonatomic, strong ) id<协议名称> *属性名称
6、协议可定义在单独的.h文件中,也可定义在某个类中
1>如果这个协议只用在某个类中,应该把协议定义在该类中
2>如果这个协议用在很多类中,就应该定义在单独的文件中
7、分类可定义在单独的.h和.m文件中,也可定义在原来的类中,要求能看懂这个语法
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------