一、Block文法介紹
// 1.定義一個Block變量
// 1.1定義一個傳回值為void,沒有形參
void (^myBlock) (void); // 定義變量
// 給這個變量指派
myBlock = ^(void)
{
NSLog(@"這是我自己定義的Block的文法");
};
// 使用
myBlock ();
// 1.2 定義一個有傳回值的而且帶有形參的block
int (^myBlock1) (int,int); // 首先定義
myBlock1 = ^(int a,int b)
{
return a+b;
}; // 後面一定要加分号,因為這是語句
NSLog(@"%d",myBlock1(2,3)); // 調用myBlock1文法
// 1.3 用tydef來定義 其形式為 typedef <#returnType#>(^<#name#>)(<#arguments#>);
newBlock result ; //.定義
result = ^(int a,int b)
{
return a+b;
}; // 封裝
NSLog(@"%d",result(5,6)); // 調用
// Block 資料類型的特點
int a = 10;
__block int b = 5;
void (^tryBlock)() = ^{
NSLog(@"a=%d",a); //.1block内部能通路外面的的局部變量
b = 6; // 如果要修改外面的局部變量,外部的變量要用__block修飾
NSLog(@"b=%d",b);
};
tryBlock() ;
二、Category與Extension
1.Category主要是用來為類增加方法而使用的,能通路類的成員變量,但不能增加很修改成員變量,當Catagory的方法與類的方法重名時,Catagory的優先級别高于類。
2.Extension主要是增加類的成員變量和方法,并且讓其轉為私有。