iOS -

1. Category

  Category是给原有类增加方法的,不能增加属性

  分类中的@property只会生成getter.setter的声明,不会生成方法的实现及成员变量。

  分类可以访问原有类.h中声明的属性

  如果一个分类有一个方法和原类方法名相同,那么用原类调用该方法是,实际调用的是分类的方法。

  如果多个分类有和原类相同的方法,那么调用时由编译器决定调用哪个。会调用最后一个参与编译的分类中的方法。

2. Extension

  可以为类扩充私有的成员变量和方法

  写在.m中

  @interface 类名 ()

  @end

3. Block

  Block是iOS一种特殊的数据类型,用来保存某一段代码,在需要的时候再取出来调用

  

返回值类型 (^blockName)(形参列表);
blockName = ^(形参列表){ 代码}; //保存代码
blockName = ^{}
block(); //调用
typedef int (^sumBlock)(int,int);
sumBlock = ^(int num1, int num2){ return num1+ num2;};
sumBlock(2,3);

 block可以访问外界变量,也可以定义和外界变量相同的变量名,但是默认情况下不能修改外界变量(a传值)

block访问了外界的变量,block会将该外界变量拷贝一份到堆内存中

int a = 10; 
void (^block)() = ^{
    NSLog("%i", a);  //拷贝了一份a=10到堆内存
};
a = 20;
block(); //此时打印的是10

block如若要修改外界变量的值,需要在外界变量前加__block.此时如果block修改了外界变量的值,那么会影响到外界变量的值(地址传值&a)

默认情况下,block 

猜你喜欢

转载自www.cnblogs.com/yintingting/p/12675983.html
ios