如何防止此方法在运行时经常调用

时间:2014-02-14 16:48:33

标签: ios objective-c sms twilio multiple-conditions

所以我有一个方法A,它基本上检查UISwitch的当前状态,然后通过text-SMS服务API提醒用户。然而;因为它不断检查引脚的状态我不希望它发送文本50000次(垃圾短信服务);此方法中的最后一个FOR循环是检查它是否应该检查用户的那个;但是当它处于当前状态时,它会在应用程序运行时不断发送。

如果您需要更多说明,请致谢。

方法A:

- (void)setInput:(NCDigitalInput *)input
    {
        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        NSString *baseString;
        uint8_t value = input.value;
        self.inputLabel.text = [NSString stringWithFormat:@"0x%0.2X",value];
        for (UISwitch *temp in switchArrayIn)
        {
            temp.on = (value & 1);
            value >>= 1;
        }
        for(int i = 0; i<switchArrayIn.count; i++){
            if(![defaults boolForKey:[NSString stringWithFormat:@"digitalInput%dRecentlyAlerted",i]] && ([[switchArrayIn objectAtIndex:i] isOn]) && ([defaults boolForKey:[NSString stringWithFormat:@"digitalInput%dBool",i]]) && ([defaults boolForKey:[NSString stringWithFormat:@"digitalInputAlertOn%dBool",i]])){
                [defaults setBool:TRUE forKey:@"digitalInput%dRecentlyAlerted"];
                baseString = [defaults objectForKey:@"digitalInput%d"];
                NSString *stringSMS = [baseString stringByAppendingString:@" has turned on"];
                [self digitalSMSCheck:i :stringSMS];
            }
            if(![defaults boolForKey:[NSString stringWithFormat:@"digitalInput%dRecentlyAlerted",i]] && !([[switchArrayIn objectAtIndex:i] isOn]) && ([defaults boolForKey:[NSString stringWithFormat:@"digitalInput%dBool",i]]) && ([defaults boolForKey:[NSString stringWithFormat:@"digitalInputAlertOff%dBool",i]])){
                [defaults setBool:TRUE forKey:@"digitalInput%dRecentlyAlerted"];
                baseString = [defaults objectForKey:@"digitalInput%d"];
                NSString *stringSMS = [baseString stringByAppendingString:@" has turned off"];

                [self digitalSMSCheck:i :stringSMS];
            }
        }}

1 个答案:

答案 0 :(得分:3)

更改您的设计。轮询很糟糕,没有必要。

将IBActions附加到每个开关。

使交换机的操作方法设置属性。如果你有很多开关,你可以在每个开关上放置标签,并有一个处理所有开关的方法。

然后,您可以在属性上创建自定义setter,也可以使用键值观察来监视主机属性的更改。请查看Xcode文档中的“键值观察编程指南简介”,了解其工作原理。

哪种方法更好取决于您的应用程序的详细信息,以及您的个人品味。 KVC比其他方法慢一点,但效果很好。