一、block
1.block 是在函式執行時,儲存的一段**。block是同函式一樣是有返回值的,並且可以帶形參。下面的例子是分別展示了無引數和有引數,有無返回值的block的具體實現
//沒有引數,沒有返回值的block的定義,且後面函式體的小括號在無引數是可以省略
void (^myblock)() = ^;
// void (^myblock)() = ^();
//block的呼叫
myblock();
//帶引數和返回值的block的定義
int (^sumblock)(int, int) = ^(int a, int b);
nslog(@"%d",sumblock(4,4));
2. 為了方便在**中定義具有相同引數和相同返回值型別的block**塊,我們可以使用typedef預處理指令首先定義乙個block型別 如:
typedef int (^myblock) (int, int);
//在**塊中的呼叫
myblock sumblock = ^(int a, int b);
3.block**塊是可以訪問block 外部的變數的,但是要修改外部的區域性變數時,必須在要訪問的區域性變數的型別前面加上__block(注意:這裡是兩個下劃線__block) 關鍵字,才可以在block**塊中進行訪問
__block int c = 7;
myblock sumblock = ^(int a, int b);
二、protocol
1.protocol 即是 協議,在協議中我們可以宣告多個方法,只要乙個類遵守了這個協議,就說明這個類具有了這個協議中的所有方法
2.協議只能宣告方法,不能實現方法,實現方法要在遵守這個協議的類中進行實現。這一點同分類不同,分類是在原有類的基礎上,宣告並實現其他方法。
//
// myprotocol.h
// block
//// created by lpmac on 14-6-1.
//#import @protocol myprotocol //@required 是要求遵守協議的類實現這個方法,不實現時只會發出警告
//@optional 不要求遵守協議的類實現這個方法
@required
- (void)test;
@optional
- (void)test2;
@end
3.person類遵守myprotocol協議
//
// person.h
// block
//// created by lpmac on 14-6-1.
//#import @protocol myprotocol; //不用import可以提高執行效率,在真正用到實現協議的時候才import即可,跟.h檔案中類的使用時的@class使用方法類似
@inte***ce person : nsobject @end
//// person.m
// block
//// created by lpmac on 14-6-1.
//#import "person.h"
#import "myprotocol.h" //在協議真正使用的時候才引用
@implementation person
- (void)test
@end
4.在main函式中呼叫person *p = [[person
alloc]init];
[p test];
5.乙個類可以同時遵守多個協議,兩個協議中間使用都好隔開就可以;
同時,乙個協議也可以遵守另乙個協議,這樣就和類的整合類似,遵守另乙個協議的協議具有遵守協議的所有方法宣告
@inte***ce person : nsobject @end
@protocol myprotocol
變數的遵守某個協議時,如下這樣使用:
id obj;
屬性遵守某個協議時,如下使用:
@property (nonatomic, strong) id obj;
@property (nonatomic, strong) dog*dog;
6.protocol 經常被用在**模式和觀察者模式上
7.如果在宣告乙個物件時,且該物件只能賦值為遵守某個協議的物件,那麼我們可以使用以下的語法
person*p = [[person alloc]init];
黑馬程式設計師 block
ios培訓 mac 期待與您交流!塊 block lblock封裝了一段 可以在任何時候執行 l block可以作為函式引數或者函式的返回值,而其本身又可以帶輸入引數或返回值。l 蘋果官方建議盡量多用block。在多執行緒 非同步任務 集合遍歷 集合排序 動畫轉場用的很多 1.block的定義 in...
黑馬程式設計師 Block
一 block 1.block是一種資料型別,block的標誌 2.block封裝了一段 可以在任何時候執行 3.block可以作為函式引數或者函式的返回值,而其本身又可以帶輸入引數或返回值 4.block和函式 二 block的定義 1.block的定義 return 變數表示式 2.block內...
13 黑馬程式設計師 block語法
block封裝了一段 可以在任何時候執行 block可以作為函式引數或者函式的返回值,而其本身又可以帶輸入引數或返回值。蘋果官方建議盡量多用block。在多執行緒 非同步任務 集合遍歷 集合排序 動畫轉場用的很多 blocks 的定義 int mysum int,int inta,intb 定義了乙...