Skip to content

Instantly share code, notes, and snippets.

@pomarec
Created May 11, 2012 16:15
Show Gist options
  • Save pomarec/2660718 to your computer and use it in GitHub Desktop.
Save pomarec/2660718 to your computer and use it in GitHub Desktop.
#import "NSObject+PerformBlock.h"
@interface NSObject (PerformBlockHidden)
- (void)performBlock:(void(^)(void))block;
@end
@implementation NSObject (PerformBlock)
- (void)performBlock:(void(^)(void))block {
block();
}
- (void)performBlockInBackground:(void(^)(void))block {
[self performSelectorInBackground:@selector(performBlock:) withObject:[[block copy] autorelease]];
}
- (void)performBlockOnMainThread:(void(^)(void))block {
[self performSelectorOnMainThread:@selector(performBlock:) withObject:[[block copy] autorelease] waitUntilDone:YES];
}
- (void)performBlock:(void(^)(void))block waitUntilDone:(BOOL)wait {
[self performSelector:@selector(performBlock:) onThread:nil withObject:[[block copy] autorelease] waitUntilDone:wait];
}
- (void)performBlock:(void(^)(void))block afterDelay:(NSTimeInterval)delay {
[self performSelector:@selector(performBlock:) withObject:[[block copy] autorelease] afterDelay:delay];
}
- (void)performBlock:(void(^)(void))block repeatCount:(NSUInteger)repeatCount timeInteval:(NSTimeInterval)timeInterval {
for (NSInteger repetition = 0; repetition < repeatCount; repetition++)
[self performBlock:block afterDelay:(repetition*timeInterval)];
}
@end
@interface NSTimer (PerformBlockHidden)
+ (void)performBlockInUserInfo:(NSTimer *)timer;
@end
@implementation NSTimer (PerformBlock)
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)seconds withBlock:(void(^)(void))block repeats:(BOOL)repeats {
void (^myBlock)() = [block copy];
id ret = [self scheduledTimerWithTimeInterval:seconds target:self selector:@selector(jdExecuteSimpleBlock:) userInfo:myBlock repeats:repeats];
//[myBlock release];
return ret;
}
+ (void)jdExecuteSimpleBlock:(NSTimer *)inTimer {
if ([inTimer userInfo]) {
void (^block)() = (void (^)())[inTimer userInfo];
block();
}
}
/*
+ (void)performBlockInUserInfo:(NSTimer *)timer {
void(^block)(void) = [[timer userInfo] objectForKey:@"block_to_perform"];
if (block)
block();
//[block release];
}*/
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)seconds withBlock:(void(^)(void))block {
return [NSTimer scheduledTimerWithTimeInterval:seconds withBlock:block repeats:NO];
}
/*
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)seconds withBlock:(void(^)(void))block repeats:(BOOL)repeats {
return [NSTimer scheduledTimerWithTimeInterval:seconds
target:[NSTimer class]
selector:@selector(performBlockInUserInfo:)
userInfo:[NSDictionary dictionaryWithObject:[block copy] forKey:@"block_to_perform"]
repeats:repeats];
}*/
@end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment