Skip to content

Commit 6ddf1cf

Browse files
committed
Improved warnings for scheduler methods.
Former-commit-id: 3f29c8f
1 parent 9e26245 commit 6ddf1cf

File tree

2 files changed

+28
-23
lines changed

2 files changed

+28
-23
lines changed

cocos2d-ui-tests/tests/CCSchedulerTest.m

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -23,33 +23,24 @@ -(id)initWithTexture:(CCTexture *)texture rect:(CGRect)rect rotated:(BOOL)rotate
2323
return self;
2424
}
2525

26-
-(void)foo:(CCTime)delta
26+
-(void)before:(CCTime)delta
2727
{
28-
NSLog(@"Foooo!");
28+
NSLog(@"Before");
2929
}
3030

31-
-(void)fooSingle:(CCTime)delta
31+
-(void)after:(CCTime)delta
3232
{
33-
NSLog(@"FooSingle!");
33+
NSLog(@"After");
3434
}
3535

3636
-(void)onEnter
3737
{
3838
// Scheduling a method before calling [super onEnter] used to trigger a bug.
39-
// [self schedule:@selector(foo:) interval:1.0];
40-
41-
[self scheduleBlock:^(CCTimer *timer){
42-
NSLog(@"Before");
43-
[timer repeatOnceWithInterval:2.0];
44-
} delay:0.0];
39+
[self schedule:@selector(before:) interval:2.0];
4540

4641
[super onEnter];
4742

48-
[self scheduleBlock:^(CCTimer *timer){
49-
NSLog(@"After");
50-
[timer repeatOnceWithInterval:2.0];
51-
} delay:0.0];
52-
43+
[self schedule:@selector(after:) interval:2.0];
5344
}
5445

5546
-(void)update:(CCTime)delta

cocos2d/CCNode.m

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1148,13 +1148,29 @@ -(CCTimer *) schedule:(SEL)selector interval:(CCTime)interval
11481148
return [self schedule:selector interval:interval repeat:CCTimerRepeatForever delay:0];
11491149
}
11501150

1151+
-(BOOL)unschedule_private:(SEL)selector
1152+
{
1153+
NSString *selectorName = NSStringFromSelector(selector);
1154+
1155+
for(CCTimer *timer in [_scheduler timersForTarget:self]){
1156+
if([selectorName isEqual:timer.userData]){
1157+
[timer invalidate];
1158+
return YES;
1159+
}
1160+
}
1161+
1162+
return NO;
1163+
}
1164+
11511165
-(CCTimer *) schedule:(SEL)selector interval:(CCTime)interval repeat: (uint) repeat delay:(CCTime) delay
11521166
{
1153-
NSAssert( selector != nil, @"Argument must be non-nil");
1154-
NSAssert( selector != @selector(update:) && selector != @selector(fixedUpdate:), @"The update: and fixedUpdate: methods are scheduled automatically.");
1155-
NSAssert( interval >=0, @"Arguemnt must be positive");
1167+
NSAssert(selector != nil, @"Selector must be non-nil");
1168+
NSAssert(selector != @selector(update:) && selector != @selector(fixedUpdate:), @"The update: and fixedUpdate: methods are scheduled automatically.");
1169+
NSAssert(interval > 0.0, @"Scheduled method interval must be positive.");
11561170

1157-
[self unschedule:selector];
1171+
if([self unschedule_private:selector]){
1172+
CCLOGWARN(@"Selector '%@' was already scheduled on %@", NSStringFromSelector(selector), self);
1173+
}
11581174

11591175
void (*imp)(id, SEL, CCTime) = (__typeof(imp))[self methodForSelector:selector];
11601176
CCTimer *timer = [_scheduler scheduleBlock:^(CCTimer *t){
@@ -1175,10 +1191,8 @@ - (CCTimer *) scheduleOnce:(SEL) selector delay:(CCTime) delay
11751191

11761192
-(void)unschedule:(SEL)selector
11771193
{
1178-
NSString *selectorName = NSStringFromSelector(selector);
1179-
1180-
for(CCTimer *timer in [_scheduler timersForTarget:self]){
1181-
if([selectorName isEqual:timer.userData]) [timer invalidate];
1194+
if(![self unschedule_private:selector]){
1195+
CCLOGWARN(@"Selector '%@' was never scheduled on %@", NSStringFromSelector(selector), self);
11821196
}
11831197
}
11841198

0 commit comments

Comments
 (0)