//
// main.m
// Block
//
// Created by New-World on 13-11-11.
// Copyright (c) 2013年 Gary. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Button.h"
#import "Person.h"
typedef int (^MySum)(int,int);
void test()
{
int (^Sum)(int a,int b)=^(int a,int b){
return a+b;
};
NSLog(@"和是:%i",Sum(10,30));
}
void test2()
{
__block int c=8;
MySum sum=^(int a,int b){//block可以訪問,但不能修改外部變量
c=19;//如果必須要修改,要加__block關鍵字修飾
NSLog(@"%i",c);
return a+b;
};
NSLog(@"%i",sum(10,10));
}
#pragma mark 作爲參數傳遞的block
int test3(int (^Sum)(int,int))
{
return Sum(20,20);
}
void test4(void (^minus)(int))
{
minus(12);
}
void test5(int a,int (^Sum)(int,int),void (^minus)(int)){
}
#pragma mark block在對象間的傳遞
int main(int argc, const char * argv[])
{
@autoreleasepool {
Button *btn=[[Button new] autorelease];
btn.block=^(Button *btn){
NSLog(@"按鈕-%@被點擊了",btn);
};
[btn click];//回調
void (^minus)(int)=^(int c){
NSLog(@"%i",c);
};
test4(minus);
int (^Sum)(int,int)=^(int a,int b){
return a+b;
};
NSLog(@"兩者的和是:%i",test3(Sum));
Person *p=[Person new];
[p test:^int(int a, int b) {
return a-b;
}];
[p release];
}
return 0;
}
////////////////////////////////////////////////
#import <Foundation/Foundation.h>
@class Button;
typedef void (^ButtonBlock) (Button *);
@interface Button : NSObject
@property (nonatomic,assign) ButtonBlock block;//Block是一種數據類型,所以不用加*
-(void)click;
@end
////////////////////////////////////////////////
#import "Button.h"
@implementation Button
-(void)click{
_block(self);
}
@end
///////////////////////////////////////////////
#import <Foundation/Foundation.h>
typedef int (^Minus)(int,int);
@interface Person : NSObject
-(void)test:(Minus)minus;
@end
/////////////////////////////////////////////////
#import "Person.h"
@implementation Person
-(void)test:(Minus)minus{//test方法負責傳遞參數,調用者進行方法的具體實現
int x=minus(20,30);
NSLog(@"block在對象間的傳遞:%i",x);
}
@end
OC語法之Block
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.