程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 10、Blocks應用-OC

10、Blocks應用-OC

編輯:關於C語言

[Blocks是指就是c語音中的函數指針]

Blocks最早是從蘋果本地的雪豹,移植到iPhone。官方建議多用blocks,在多線程應用比較廣泛

(1)Blocks 是什麼

(2)Blocks 和 c語音函數指針的區別

(3)如何調用Blocks

(4)代理2端如何通過Blocks通信



(1)Blocks 是什麼

和c語音函數指針類似,運行需要編譯器和運行時的支持(ios4.0開始支持 Blocks )

兩個對象之間通信,用到Blocks,相當於回調函數。

(2)Blocks 和 c語音函數指針的區別

\

(3)如何調用Blocks

\

typedef 定義:

\

_ _block關鍵字:

變成一個全局變量


blocs簡單用法:

block 申明:

void (^myblocks)(void) =NULL;

block 賦值:

myblocks = ^(void){

NSLog(@"in blocks");

};

block 調用:

myblocks();

例子1:

    int (^myblocks2)(int a, int b) = ^(int a, int b){//賦值

        int c = a+b;

        return c;

    }

    int ret = myblocks2(10,20);//執行

例子2:

__block int sum = 0;//變成全局變量

int (^myblocks3)(int a, int b) = ^(int a, int b){

sum = a+b;

return sum;

}

myblock3(20,30);

例子3:

typedef int (^SumBlockT)(int , int);//定義一個類型

SumBlockT myblocks4 = ^(int a, int b){

NSLog(@"sum: %d", a+b);return 0;

}

myblock4(10,12);



(4)代理2端如何通過Blocks通信

iphone開發用到的blocks:

人中定義一個blocks,狗每次定時調用這個blocks;

狗中定義一個blocks,用來存放人中的定義的blocks函數。

狗:

.h

void (^BarkCallback)(Dog *thisDog, int count);//變量

- (void) setBark:( void(^)(Dog *thisDog, int count))eachBark;//向外暴露這個函數,給人賦值的。

.m

- (void)updatatime:(id)arg

{

if(BarkCallblack)

{

BarkCallback(self, barkCount);

}

}

- (void) setBark:( void(^)(Dog *thisDog, int count))eachBark

{

[BarkCallblack release];

BarkCallblack = [eachBark copy];//copy是因為setDog函數可能被釋放。

}

-(void) dealloc

{

[BarkCallblack release];

[super dealloc];

}

人:

setDog函數裡面:

[_dog setBark:^(Dog *thisDog, int count){

NSLog(@"person dog %d count %d\n", thisDog.ID, count );

}]






  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved