gpt4 book ai didi

objective-c - 从 NSTimer 选择器访问实例变量

转载 作者:太空狗 更新时间:2023-10-30 04:00:46 26 4
gpt4 key购买 nike

第一个新手问题:选择器和方法有什么区别?

第二个新手问题(谁会想到):我需要根据实例变量循环一些代码并在循环之间暂停,直到满足某些条件(当然是基于实例变量)。我看过 sleep ,我看过 NSThread。在通过这些选项进行的两次讨论中,许多人问我为什么不使用 NSTimer,所以我来了。

好吧,让一个方法(选择器?)按计划触发就足够简单了。我遇到的问题是我不知道如何从代码 NSTimer 触发中查看我在计时器外部设置的实例变量。我需要从 NSTimer 选择器代码中查看这些变量,因为我 1) 将更新它们的值,并且 2) 将根据这些值设置标签。

这里有一些代码展示了这个概念......最终我也会使基于 myVariable 的计时器无效,但是为了代码清晰我已经排除了它。

MyClass *aMyClassInstance = [MyClass new]; 
[aMyClassInstance setMyVariable:0];
[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(doStuff) userInfo:nil repeats:YES];
[NSTimer scheduledTimerWithTimeInterval:5.0 target:self selector:@selector(doSomeOtherStuff) userInfo:nil repeats:YES];

- (void) doStuff {
[aMyClassInstance setMyVariable:11]; // don't actually have access to set aMyClassInstance.myVariable
[self updateSomeUILabel:[NSNumber numberWithInt:aMyClassInstance.myVariable]]; // don't actually have access to aMyClassInstance.myVariable
}

- (void) doSomeOtherStuff {
[aMyClassInstance setMyVariable:22]; // don't actually have access to set aMyClassInstance.myVariable
[self updateSomeUILabel:[NSNumber numberWithInt:aMyClassInstance.myVariable]]; // don't actually have access to aMyClassInstance.myVariable
}

- (void) updateSomeUILabel:(NSNumber *)arg{
int value = [arg intValue];
someUILabel.text = [NSString stringWithFormat:@"myVariable = %d", value]; // Updates the UI with new instance variable values
}

最佳答案

您可以使用userInfo 参数来传输任意对象。在这种情况下,您将 aMyClassInstance 作为 userInfo 传递:

MyClass *aMyClassInstance = [MyClass new]; 
[aMyClassInstance setMyVariable:0];
[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(doStuff) userInfo:aMyClassInstance repeats:YES];

在计时器回调中(必须接受一个参数),您从计时器中取回 userInfo 并转换它:

- (void) doStuff:(NSTimer *)timer {
MyClass *instance = (MyClass *)[timer userInfo];
[instance setMyVariable:11];
[self updateSomeUILabel:[NSNumber numberWithInt:instance.myVariable]];
}

巧妙的是计时器保留了 userInfo 参数。

关于objective-c - 从 NSTimer 选择器访问实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2964139/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com