NSObject--block
2015-11-04 15:53
441 查看
直接以代码形式来讲block 在oc中基本的使用
#import<Foundation/Foundation.h>
intc =
0;
intmain(intargc,
const
char
* argv[]) {
@autoreleasepool {
//block声明格式:返回值类型(^blaock名字)
(形参列表)
int (^myFun)();
//block实现: block 名字=
^(形参列表){};
myFun = ^(){
NSLog(@"这是一个代码块");
return
1;
};
//调用:block名称(实参列表),有返回值的block,可以用一个变量进行接收
int a = myFun();//空括号不能少!!
NSLog(@"%d",a);
//有返回值,有形参,声明和实现放一起
int (^myBlock)(inta,
int
b) = ^(inta,
int
b){
return
1+b;
};
//调用
int sum = myBlock(10,20);
NSLog(@"%d",sum);
//返回值类型是字符串NSString *(^名字)(形参列表)
NSString *(^myBlock1) (NSString*s) = ^(NSString*s){
NSLog(@"字符串:%@",s);
return s;
};
myBlock1(@"123");
//有一个局部变量,要在block进行值的改变
__block
int b =
0;
void (^myBlock2)() = ^(){
b++;
};
//有一个全局变量,在block进行值的改变
void (^myBlock3)() = ^(){
c++;
};
}
return
0;
}
block 作为函数参数
block作为形参使用,在函数中使用block方法运算数据
#import<Foundation/Foundation.h>
//block作为函数的参数
//函数返回值类型 函数名(block的声明格式)
voidfun(int(^bsasa)(inta,intb)){
int sum = bsasa(3,2);
NSLog(@"%d",sum);
}
voidfun1(NSString*(^myBlock)(NSString*s),NSString*s1){
NSLog(@"---%@",myBlock(s1));
}
intmain(intargc,
const
char
* argv[]) {
@autoreleasepool {
//当一个block作为函数的参数是,其返回值类型、形参个数及类型要与函数形参格式保持一致
int (^myBlock) (intc,
int
d) = ^(inta,
int
b){
NSLog(@"--%d,%d",a,b);
return a-b;
};
//函数形参是block,调用时,直接传block的名字就行
fun(myBlock);
//调用的另一种方式:内联
//内联block格式:^返回值类型(形参列表){}
fun(^int(inta,
int
b) {
return a*b;
});
fun1(^NSString*(NSString*s)
{
return s;
},
@"123");
}
return
0;
}
block[b]作为方法的参数[/b]
Person.h
#import<Foundation/Foundation.h>
//使用typedef声明block:typedef返回值类型
(^名字)(形参列表)
typedefint
(^myblockType)(int a);
@interface Person :NSObject
//block作为方法的参数:(返回值类型
(^)(形参列表))参数名(blcok名字)
-(void)myblock:(int
(^)(int a))block;
-(void)sengStr:(NSString
*)name andblock:(NSString *(^)(NSString
*))myblock1;
-(void)useblockType:(myblockType)sss;
-(void)myname:(NSString
*)name;
@end
Person.m
#import"Person.h"
@implementation Person
-(void)myblock:(int
(^)(int))block{
int a = block(10);
NSLog(@"%d",a);
}
-(void)sengStr:(NSString
*)name andblock:(NSString *(^)(NSString
*))myblock1{
myblock1(name);
}
-(void)useblockType:(myblockType)sss{
int res = sss(10);
NSLog(@"---%d",res);
}
-(void)myname:(NSString
*)name{
NSString *str = [namestringByAppendingString:@"+-"];
NSLog(@"%@",str);
}
@end
main.m
#import<Foundation/Foundation.h>
#import"Person.h"
int main(int
argc, constchar
* argv[]) {
@autoreleasepool {
Person *p = [[Personalloc]init];
[p sengStr:@"尚德"andblock:^NSString
*(NSString *s) {
NSLog(@"我在:%@",s);
return s;
}];//内联形式直接实现block、
[p useblockType:^int(int
a) {//typedef声明
return a;
}];
//传入一个名字,然后进行拼接,名字--;
[p myname:@"aa"];//
[p sengStr:@"aa"andblock:^NSString
*(NSString *s) {//
return [sstringByAppendingString:@"--"];
}];
}
return0;
}
#import<Foundation/Foundation.h>
intc =
0;
intmain(intargc,
const
char
* argv[]) {
@autoreleasepool {
//block声明格式:返回值类型(^blaock名字)
(形参列表)
int (^myFun)();
//block实现: block 名字=
^(形参列表){};
myFun = ^(){
NSLog(@"这是一个代码块");
return
1;
};
//调用:block名称(实参列表),有返回值的block,可以用一个变量进行接收
int a = myFun();//空括号不能少!!
NSLog(@"%d",a);
//有返回值,有形参,声明和实现放一起
int (^myBlock)(inta,
int
b) = ^(inta,
int
b){
return
1+b;
};
//调用
int sum = myBlock(10,20);
NSLog(@"%d",sum);
//返回值类型是字符串NSString *(^名字)(形参列表)
NSString *(^myBlock1) (NSString*s) = ^(NSString*s){
NSLog(@"字符串:%@",s);
return s;
};
myBlock1(@"123");
//有一个局部变量,要在block进行值的改变
__block
int b =
0;
void (^myBlock2)() = ^(){
b++;
};
//有一个全局变量,在block进行值的改变
void (^myBlock3)() = ^(){
c++;
};
}
return
0;
}
block 作为函数参数
block作为形参使用,在函数中使用block方法运算数据
#import<Foundation/Foundation.h>
//block作为函数的参数
//函数返回值类型 函数名(block的声明格式)
voidfun(int(^bsasa)(inta,intb)){
int sum = bsasa(3,2);
NSLog(@"%d",sum);
}
voidfun1(NSString*(^myBlock)(NSString*s),NSString*s1){
NSLog(@"---%@",myBlock(s1));
}
intmain(intargc,
const
char
* argv[]) {
@autoreleasepool {
//当一个block作为函数的参数是,其返回值类型、形参个数及类型要与函数形参格式保持一致
int (^myBlock) (intc,
int
d) = ^(inta,
int
b){
NSLog(@"--%d,%d",a,b);
return a-b;
};
//函数形参是block,调用时,直接传block的名字就行
fun(myBlock);
//调用的另一种方式:内联
//内联block格式:^返回值类型(形参列表){}
fun(^int(inta,
int
b) {
return a*b;
});
fun1(^NSString*(NSString*s)
{
return s;
},
@"123");
}
return
0;
}
block[b]作为方法的参数[/b]
Person.h
#import<Foundation/Foundation.h>
//使用typedef声明block:typedef返回值类型
(^名字)(形参列表)
typedefint
(^myblockType)(int a);
@interface Person :NSObject
//block作为方法的参数:(返回值类型
(^)(形参列表))参数名(blcok名字)
-(void)myblock:(int
(^)(int a))block;
-(void)sengStr:(NSString
*)name andblock:(NSString *(^)(NSString
*))myblock1;
-(void)useblockType:(myblockType)sss;
-(void)myname:(NSString
*)name;
@end
Person.m
#import"Person.h"
@implementation Person
-(void)myblock:(int
(^)(int))block{
int a = block(10);
NSLog(@"%d",a);
}
-(void)sengStr:(NSString
*)name andblock:(NSString *(^)(NSString
*))myblock1{
myblock1(name);
}
-(void)useblockType:(myblockType)sss{
int res = sss(10);
NSLog(@"---%d",res);
}
-(void)myname:(NSString
*)name{
NSString *str = [namestringByAppendingString:@"+-"];
NSLog(@"%@",str);
}
@end
main.m
#import<Foundation/Foundation.h>
#import"Person.h"
int main(int
argc, constchar
* argv[]) {
@autoreleasepool {
Person *p = [[Personalloc]init];
[p sengStr:@"尚德"andblock:^NSString
*(NSString *s) {
NSLog(@"我在:%@",s);
return s;
}];//内联形式直接实现block、
[p useblockType:^int(int
a) {//typedef声明
return a;
}];
//传入一个名字,然后进行拼接,名字--;
[p myname:@"aa"];//
[p sengStr:@"aa"andblock:^NSString
*(NSString *s) {//
return [sstringByAppendingString:@"--"];
}];
}
return0;
}
相关文章推荐
- [论文笔记4]Robust Object Detection via soft cascade
- Objective-C之代理设计模式小实例
- objective-c基础教程——学习小结
- Windows下的Objective-C集成开发环境(IDE)
- 关联(objc_setAssociatedObject、objc_getAssociatedObject)
- objective-C protocol协议
- Windows 下使用 GNUstep 编译并运行 Objective-C 程序
- Objective-C学习笔记之block
- 【Objective-C】Windows下Objective-C开发环境配置
- Odoo8查询产品时提示"maximum recursion depth exceeded while calling a Python object"
- Objective-C Blocks Quiz
- 如何使用swfobject(中文版)
- 黑马程序员-------Objective-C基础2
- Objective-C中变量采用@property的各个属性值的含义
- (原创)c#学习笔记09--定义类02--System.Object
- 全面解析Objective-C中的block代码块的使用
- Object C 第二讲
- iOS开发系列—Objective-C之Foundation框架
- Objective-C之Block
- Objective-C的Runtime