状态 组合情况 太多的处理方式

本文通过一个Objective-C的实际代码示例介绍了如何定义和使用枚举类型,包括服务器状态和客户端状态的定义,并展示了如何在触摸事件中根据组合状态进行处理。


//
//  ViewController.m
//  test_NSEnum_status_01
//
//  Created by jeffasd on 16/9/9.
//  Copyright © 2016年 jeffasd. All rights reserved.
//

#import "ViewController.h"


typedef NS_ENUM(NSUInteger, RemoteServerStatus) {
    RemoteServerNone = 0,
    RemoteServerUnknown,
    RemoteServerNetWorkDisconnect,
};

typedef NS_ENUM(NSUInteger, RemoteClientStatus) {
    RemoteClientNone = 0 << 4,
    RemoteClientUnknown = 1 << 4,
    RemoteClientNetworkDisconnect = 2 << 4,
};

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    
    [self handleStatusWithState:RemoteServerUnknown | RemoteClientNetworkDisconnect];
    
}

- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    
//    [self handleStatusWithState:RemoteServerNone | RemoteClientNone];
    
    [self handleStatusWithState:RemoteClientNone | RemoteServerNone];
}


- (void)handleStatusWithState:(NSUInteger)state{
    
    switch (state) {
        case RemoteServerNone | RemoteClientNone:
        {
            NSLog(@"都未知");
        }
            break;
            
        case RemoteServerNone | RemoteClientUnknown:
        {
            NSLog(@"客户端未知");
        }
            break;
            
        case RemoteServerUnknown | RemoteClientNetworkDisconnect:
        {
            NSLog(@"客户端网络状态未知");
        }
            break;
            
        default:
            break;
    }
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end


<think>好的,我需要帮用户解决如何减少单片机项目中全局变量使用的问题。首先,用户提到代码结构混乱,全局变量太多,导致维护困难。根据提供的引用,特别是引用[3]提到的问题,我需要整理出一些有效的方法。 首先想到的是模块化设计。将功能拆分成独立模块,每个模块有自己的局部变量,通过接口函数访问,这样可以减少全局变量的数量。引用[1]也提到优化数据结构和算法,这可能涉及到模块化的优化。 然后是使用静态变量。在C语言中,静态变量可以在函数内部保持状态,同时限制其作用域,避免全局污染。这样既能保持数据的持久性,又不影响其他模块。 接下来是结构体封装。把相关的全局变量组合成结构体,这样不仅能减少变量数量,还能提高代码的可读性。例如引用[2]提到的全局变量的管理,结构体可能是一个好方法。 另外,使用函数参数和返回值来传递数据,而不是依赖全局变量。这可以增强函数的独立性,减少外部依赖。引用[1]中的减少不必要的全局变量可能包括这种优化。 还有优化算法和数据结构,比如用局部变量代替全局变量,或者重新设计算法减少对全局状态的依赖。这可能涉及到引用[1]中的建议。 事件驱动架构也是一个方向,通过消息队列或回调函数传递数据,减少全局状态的使用。引用[3]提到的代码混乱问题可能通过这种架构得到改善。 应用设计模式如观察者模式或单例模式,可以集中管理状态,避免滥用全局变量。这部分可能需要结合具体的代码结构来调整。 最后,代码审查和重构是关键,定期检查全局变量的使用情况,逐步替换不必要的全局变量。引用[1]提到定期维护和优化项目,包括重构模块代码,这正好符合用户的需求。 需要确保这些方法具体可行,并且结合用户的实际项目情况。同时,要检查引用是否正确,比如引用[2]提到extern关键字的使用,但用户的问题更多是关于减少全局变量,可能需要强调合理使用extern而不是完全避免。 总结以上思路,整理出结构清晰的步骤,并附上示例代码,帮助用户理解如何实施这些方法。同时,生成相关问题,引导用户进一步学习。</think>### 如何通过优化设计减少单片机项目中的全局变量? #### 1. **模块化设计与作用域控制** - **封装功能模块**:将相关功能拆分为独立模块(如`.c/.h`文件),每个模块仅暴露必要的接口函数,内部变量使用`static`关键字限制作用域。 ```c // 示例:传感器模块 sensor.c static int sensor_data; // 仅在模块内可见 int get_sensor_data() { return sensor_data; } void update_sensor() { /* 更新sensor_data */ } ``` - **减少跨模块耦合**:通过函数参数和返回值传递数据,而非直接操作全局变量[^1]。 #### 2. **使用结构体封装相关变量** - **组合相关数据**:将逻辑相关的全局变量合并为结构体,提升代码可读性并减少变量数量。 ```c typedef struct { int temperature; int humidity; } SensorData; SensorData sensor; // 替代多个独立全局变量 ``` #### 3. **利用静态变量与局部变量** - **静态变量替代全局状态**:在函数内部使用`static`变量保存局部状态,避免全局暴露。 ```c void process_data() { static int counter = 0; // 仅在此函数内持久化 counter++; } ``` #### 4. **优化算法与数据流设计** - **减少对全局状态的依赖**:
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值