nin*_*eer 9 syntax objective-c
我有:
[self schedule:@selector(tickhealth)];
Run Code Online (Sandbox Code Playgroud)
而tickHealth方法只有一行代码:
-(void)tickHealth
{
[hm decreaseBars:0.5];
}
Run Code Online (Sandbox Code Playgroud)
是否可以使用块对象代替选择器.例如:
[self schedule:^{
[hm decreaseBars:0.5];
}];
Run Code Online (Sandbox Code Playgroud)
正如Caleb&bbum正确指出的那样,你不能简单地将一个块传递给你现有的(并且没有改变的)- (void)schedule:(SEL)selector;方法.
但是你可以这样做:
定义块类型:
typedef void(^ScheduleBlock)();
Run Code Online (Sandbox Code Playgroud)
schedule:要定义的更改方法与此类似:
- (void)schedule:(ScheduleBlock)block {
//blocks get created on the stack, thus we need to declare ownership explicitly:
ScheduleBlock myBlock = [[block copy] autorelease];
//...
myBlock();
}
Run Code Online (Sandbox Code Playgroud)
然后像这样称呼它:
[self schedule:^{
[hm decreaseBars:0.5];
}];
Run Code Online (Sandbox Code Playgroud)
Mike Ash编写的进一步的Objective-C块优点将让你用块启动: