我有:使用塊對象而不是選擇器?
[self schedule:@selector(tickhealth)];
而且tickHealth方法只有一行代碼:
-(void)tickHealth
{
[hm decreaseBars:0.5];
}
是有可能在適當位置的選擇器的使用塊的對象。例如像:
[self schedule:^{
[hm decreaseBars:0.5];
}];
我有:使用塊對象而不是選擇器?
[self schedule:@selector(tickhealth)];
而且tickHealth方法只有一行代碼:
-(void)tickHealth
{
[hm decreaseBars:0.5];
}
是有可能在適當位置的選擇器的使用塊的對象。例如像:
[self schedule:^{
[hm decreaseBars:0.5];
}];
由於迦勒& bbum正確地指出,你不能塊簡單地傳遞到您現有的(不變)- (void)schedule:(SEL)selector;
方法。
但是,您可以這樣做:
定義塊類型:
typedef void(^ScheduleBlock)();
變化schedule:
方法來定義與此類似:
- (void)schedule:(ScheduleBlock)block {
//blocks get created on the stack, thus we need to declare ownership explicitly:
ScheduleBlock myBlock = [[block copy] autorelease];
//...
myBlock();
}
然後調用它像這樣:
[self schedule:^{
[hm decreaseBars:0.5];
}];
由Mike灰編譯
進一步的Objective-C塊善良,將讓你與動工塊:
你不能僅僅通過一個塊代替選擇器,因爲這兩個東西有不同的類型。但是,如果您可以控制-schedule:
方法,則可以輕鬆修改它以接受和使用代替選擇器的塊。
此方法與OP的方法不兼容; SEL與塊不同。 – bbum
@bbum:對,這就是爲什麼我寫了「Define'schedule:'類似於這個的方法:...」。爲了清楚起見,應該寫成「重新定義」,也許。糾正。 – Regexident