gpt4 book ai didi

iPhone操作系统: making a switch statement that uses string literals as comparators instead of integers

转载 作者:行者123 更新时间:2023-12-03 20:19:49 25 4
gpt4 key购买 nike

所以我想这样做:

switch (keyPath) {
case @"refreshCount":
//do stuff
case @"timesLaunched":
//do other stuff
}

但显然你只能使用整数作为开关量。唯一的方法是将字符串解析为整数标识符,然后运行 ​​switch 语句吗?

像这样:

nsinteger num = nil;

if (keyPath isEqual:@"refreshCount") {

num = 0

}

if (keyPath isEqual:@"timesLaunched") {

num = 1

}

我正在尝试尽可能快地优化此代码,因为它会经常被调用。

谢谢

尼克

注意:是的,我正在使用 KVO,因此我在“回调”中收到一个字符串。

注意#2:所以让我首先考虑 switch 语句的是我原来的代码实现是这样的:

if ([keyPath isEqual:@"refreshCount"] && ([[change valueForKey:@"new"] intValue] == 10)) { //  
NSLog(@"achievemnt hit inside");
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"title" message:@"Achievement Unlocked!" delegate:self cancelButtonTitle:@"cancel" otherButtonTitles:nil];
[alert show];

我想用同一个方法用不同的 XX 值做一堆这样的事情:

if ([keyPath isEqual:@"refreshCount"] && ([[change valueForKey:@"new"] intValue] == 10)) {

//unlock small achievement

}
if ([keyPath isEqual:@"refreshCount"] && ([[change valueForKey:@"new"] intValue] == 50)) {

//unlock bigger achievement

}

//etc

这对我来说似乎效率很低,但也许我错了。

最佳答案

也就是说,要使强制转换语句起作用,它只需要调用 isEqualToString: ,并且速度会一样慢,但可能不会像您想象的那么慢。

当然,第一个问题是您是否测量过性能并且有证据表明代码导致了性能问题?

如果没有,请完成您的应用程序。运输应用程序的性能始终优于仍在开发中的应用程序!

我敢打赌你没有性能问题;如果所有字符串确实都是内联字符串常量 - @"refreshCount" 等 - 与键值观察相关,那么它们很可能都是编译到因此,比较速度会非常快,因为每次提到 "@refreshCount" 时,它实际上都是同一地址处的相同字符串(比较速度非常快)。

如果您确实存在可量化的性能问题,请在不同的问题中发布详细信息,以便有人可以具体回答。事实上,除了推测之外,没有足够的架构或定量信息来进行任何操作。

关于iPhone操作系统: making a switch statement that uses string literals as comparators instead of integers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2906955/

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