//
// 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
最新推荐文章于 2022-10-28 11:31:51 发布