// 定义一个Block Object,返回值:NSString;别名:intToString;参数:NSUInteger。
NSString* (^intToString)(NSUInteger) = ^(NSUInteger paramInteger){
};
// 调用我们定义的Block Ojbect
NSString *string = intToString(10);
NSLog(@"string = %@", string);
typedef NSString* (^IntToStringConverter)(NSUInteger paramInteger);
- (NSString *)convertIntToString:(NSUInteger)paramInteger usingBlockObject:(IntToStringConverter)paramBlockObject{
}
= [self convertIntToString:123 usingBlockObject:intToString];
typedef NSString* (^IntToStringConverter)(NSUInteger paramInteger);
- (NSString *)convertIntToString:(NSUInteger)paramInteger usingBlockObject:(IntToStringConverter)paramBlockObject{
}
- (void) doTheConversion{
(unsignedlong)paramInteger];
}
[self doTheConversion];
什么是内联Block?
我的理解是,写在方法内部的,编译器在编译阶段无法知道要调用的具体Block内容。
就像上边的例子:
独立Block:在编译阶段,已经就定义好了Block方法:
//
NSString* (^intToString)(NSUInteger) = ^(NSUInteger
};
内联Block:在编译阶段,编译器并不知道所关联的Block是什么。
因为它是在调用doTheConversion方法时,临时分配的(inlineConverter)。红色块。
- (void) doTheConversion{
}
同理,就相当于:
- (void) doTheConversion{
{
}
是啊,很多iOS中的方法,用的都是这种方式!对用的就是内联Block!!!
原来如此啊!
先mark到这里吧!
下一步,我们来了解一下,关于Block变量的一些东西!
Block 的变量
1.独立Block 变量的操作。
定义Block:
void (^independentBlockObject)(void) = ^(void){
};
调用:
independentBlockObject();
输出:
2013-03-26 20:13:50.144 DemoVideo[20505:707] local integer = 10
2013-03-26 20:13:50.147 DemoVideo[20505:707] local integer = 20
2.内联Block 变量的操作。
我们知道Object-C中已经有很多用Block作为参数的函数。该Block参数,作为内联Block调用。
于是,就用一个数组比较的方法:
定义:
- (void) simpleMethod{
{
}
调用:
[self simpleMethod];
输出:
Printing description of sortedArray:
<__NSArrayI 0x1f56d430>(
100,
150,
200
)
Printing description of array:
<__NSArrayM 0x1f585ed0>(
100,
200,
150
)
我们不用关心,sortedArrayUsingComparat
可见:独立Block可以在内部定义变量,访问变量,修改变量!