HI,我在NSOperation子类中(在myOperation.m中)有一个静态NSMutableArray * staticArray和一个方法:
static NSMutableArray * staticArray = 无;
+(void)初始化{
staticArray = [[NSMutableArray alloc] init];
}
-(void) addStrToStaticArray:(NSString*)aStr {
if([staticArray indexOfObject:aStr] == NSNotFound) {
[staticArray addObject:aStr];
[staticArray performSelector:@selector(removeObject:)
withObject:aStr
afterDelay:30.];
}
}
我调用上面的方法,之后操作完成执行。问题是aStr永远不会从数组中删除。我错过了什么?感谢...
答案 0 :(得分:1)
根据Justin的建议,我现在可以延迟从NSThread内部调用该方法的数组中删除一个对象,尽管NSOperation在删除时存在,但仍然存在:
NSMethodSignature * mySignature = [NSMutableArray instanceMethodSignatureForSelector:@selector(removeObject:)];
NSInvocation * myInvocation = [NSInvocation invocationWithMethodSignature:mySignature];
[myInvocation setTarget:staticArray];
[myInvocation setSelector:@selector(removeObject:)];
[myInvocation setArgument:&aStr atIndex:2];
//At this point, myInvocation is a complete object, describing a message that can be sent.
NSTimer *timer = [NSTimer timerWithTimeInterval:90.
invocation:myInvocation
repeats:NO];
if(timer) {
NSRunLoop *mainRL = [NSRunLoop mainRunLoop];
[mainRL addTimer:timer forMode:NSDefaultRunLoopMode];
}
90秒后,aStr将从staticArray中删除。详情......
答案 1 :(得分:0)
使用计时器(CFRunLoopTimer / NSTimer)并运行循环(CFRunLoop / NSRunLoop)apis来完成此任务。
在这种情况下,您创建一个计时器,并将其添加到主运行循环。
这还需要您为计时器创建一个函数或方法来调用。如果你选择一个方法,你可以使用NSInvocation(如果这是你喜欢的)。
由于数据是静态的,并且操作(可能)不存在,您可以通过类方法发送消息。