use*_*914 12 block objective-c automatic-ref-counting
以下是我在NSTimer上的Objective-C类别,用于对NSTimers进行基于块的触发.我看不出它有什么问题,但我得到的是我传入schedule...
方法的块正在被解除分配,尽管我要求copy
它.
我错过了什么?
typedef void(^NSTimerFiredBlock)(NSTimer *timer);
@implementation NSTimer (MyExtension)
+ (void)timerFired:(NSTimer *)timer
{
NSTimerFiredBlock blk = timer.userInfo;
if (blk != nil) {
blk(timer);
}
}
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)seconds
repeats:(BOOL)repeats
callback:(NSTimerFiredBlock)blk
{
return [NSTimer scheduledTimerWithTimeInterval:seconds
target:self
selector:@selector(timerFired:)
userInfo:[blk copy]
repeats:repeats];
}
@end
Run Code Online (Sandbox Code Playgroud)
Mc.*_*ver 33
我发现这个代码了 http://orion98mc.blogspot.ca/2012/08/objective-c-blocks-for-fun.html
做得好
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:0.7
target:[NSBlockOperation blockOperationWithBlock:^{ /* do this! */ }]
selector:@selector(main)
userInfo:nil
repeats:NO
];
Run Code Online (Sandbox Code Playgroud)
你在github上有一个项目来完成这项工作!
Cocoapod BlocksKit,允许你阻止一堆类......
#import "NSTimer+BlocksKit.h"
[NSTimer bk_scheduledTimerWithTimeInterval:1.0 block:^(NSTimer *time) {
// your code
} repeats:YES];
Run Code Online (Sandbox Code Playgroud)
尝试这个
typedef void(^NSTimerFiredBlock)(NSTimer *timer);
@interface NSObject (BlocksAdditions)
- (void)my_callBlock:(NSTimer *)timer;
@end
@implementation NSObject (BlocksAdditions)
- (void)my_callBlock:(NSTimer *)timer {
NSTimerFiredBlock block = (id)self;
block(timer);
}
@implementation NSTimer (MyExtension)
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)seconds
repeats:(BOOL)repeats
callback:(NSTimerFiredBlock)blk
{
blk = [[blk copy] autorelease];
return [NSTimer scheduledTimerWithTimeInterval:seconds
target:blk
selector:@selector(my_callBlock:)
userInfo:nil
repeats:repeats];
}
@end
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
15316 次 |
最近记录: |