美文网首页
项目中编程的一些小思想

项目中编程的一些小思想

作者: woniu | 来源:发表于2018-03-01 17:05 被阅读19次
“非利不动,非得不用,非危不战。主不可以怒而兴师,将不可以愠而致战。 合于利而动,不合于利而止。怒可以复喜,愠可以复悦,亡国不可以复存,死者不可以复生。”----《孙子兵法·火攻篇》

引用一下孙子兵法中的名言,人要有大局观,所谓不谋万世者不足以谋一时,不谋全局者不足以谋一隅,遇大事不可以被情绪化主导。投射到工作中来,可能难免会有一些事影响心情,但不管是什么问题,都要冷静下来好好分析,内心的小情绪不但于事无补,而且会影响做事效率。我们首要的是把事情做好、做成,其余什么都不必太在乎。慢慢修行吧!

下面开始总结项目中的一些思想,为了让自己的代码越来越简介优秀!加油!

1、设置AppDelegate.m类别

场景:AppDelegate中往往会集成较多的功能,比如引导页、数据统计、支付、分享、数据存储(SQL)、登录、NavigationController设置等等,这样的话如果将代码全部写到AppDelegate.m中就会导致代码量过于庞大,且代码量一多查找修改就难免会耗费我们的一些宝贵时间。
解决办法:增加AppDelegate的类别,将这些功能分别迁移出来,对应相应的类别。

#import "AppDelegate.h"
#import "AppDelegate+VCInit.h"//集成视图
#import "AppDelegate+MagicalRecord.h"//存储数据管理
#import "AppDelegate+RestKitInit.h"//请求并存储数据

2、通用型数据以及通用方法

凡是通用型数据如APP版本、设备型号等,以及涉及到MD5加密,转码成JSON等方法最好都集成到一个单独的方法中。平时不注意的话总是用到的话顺手就写到某个.m文件中,其实只是当时方便,对整体管理来说无益,任何一个细节都值得注意。

3、由于方法更新又要保持原有的方法

通常我们会有和原方法功能类似的新的方法,但是有想保留原方法,这时我们可以设置原方法为过期方法,这样已保留了原方法又做到了提示效果。

+ (void)recordGeneralWithDuration:(EventInfo *)messsageInfo __attribute__((deprecated("方法已过期")));
或者
#define MJExtensionDeprecated(instead) NS_DEPRECATED(2_0, 2_0, 2_0, 2_0, instead)
+ (NSMutableArray *)objectArrayWithKeyValuesArray:(id)keyValuesArray MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***");

废弃的属性:
@property (nonatomic, copy) NSString *type;
@property (nonatomic, copy) NSString *url __attribute__((deprecated("url属性已过期")));
@property (nonatomic, copy) NSString *used;
@property (nonatomic, copy) NSString *who DEPRECATED_MSG_ATTRIBUTE("who属性已经被废弃");

示例图如下:


提示.png

4、仅在测试条件下输出信息

我们在测试条件下需要打印数据查看数据,但是一旦要上线,打印功能不但多余而且影响性能。如果一个一个屏蔽掉有太麻烦,所以出现了一下方法:

// 日志输出
#ifdef DEBUG
#define ZHLog(...) NSLog(__VA_ARGS__)
#else
#define ZHLog(...)
#endif

另外,NSLog打印大量数据的时候有时候会出现打印不全的问题,所以提供以下方法来解决大量数据打印缺失的问题:

#define ZHNSLog(FORMAT, ...) fprintf(stderr, "%s:%zd\t%s\n", [[[NSString stringWithUTF8String: __FILE__] lastPathComponent] UTF8String], __LINE__, [[NSString stringWithFormat: FORMAT, ## __VA_ARGS__] UTF8String]);

5、私有化方法

在开发中,难免会使用私有方法来协助我们达到某种目的或获取某个数据。在oc中,很多人包括我都会这样写:- (void)myName {}。个人是不赞成这样写了,除非方法内部使用了self。总之,类似于这样的方法,其实跟我们的业务并没有太大的关系。我进入一个控制器的文件中,目光应该集中在业务代码上才对。

//使用方法
static void getSuper(Class class, NSString *result) {
    if ([class superclass]) {
        getSuper([class superclass], result);
        NSLog(@"---------------class:%@------result:%@",NSStringFromClass(class),result);
    }
}

static NSString* getCarrier(NSString *carrier){
    
    return carrier;
}
//调用方法
   NSString *result = @"1234567890";
    getSuper([self class], result);
    NSString *carrier = @"中国移动";
    NSLog(@"张开发送了一个返回值:%@",getCarrier(carrier));

打印值如下:


打印.png

6、开发中设置一些共用的类

这一点相比很多开发者都深有体会,比如设置网络中断的提示view、md5等加密方法、网络的封装,等等都会使我们在开发过程中更加的灵活。

7、在成对出现的处理中要善用数组来简化操作

比如在创建TabBar的时候,会有好几个TabBar,此时我们就可以用数组来处理,分别用数组填装ViewController、title、image、selectImage等信息,来统一处理,方便简洁。如下:

- (void)SetupAllControllers{
    NSArray *titles = @[@"发现", @"关注", @"消息", @"我的"];
    NSArray *images = @[@"icon_tabbar_home~iphone", @"icon_tabbar_subscription~iphone", @"icon_tabbar_notification~iphone", @"icon_tabbar_me~iphone"];
    NSArray *selectedImages = @[@"icon_tabbar_home_active~iphone", @"icon_tabbar_subscription_active~iphone", @"icon_tabbar_notification_active~iphone", @"icon_tabbar_me_active~iphone"];
    
    HomeViewController * homeVc = [[HomeViewController alloc] init];
    self.homeVc = homeVc;
    
    SubscriptionViewController * subscriptionVc = [[SubscriptionViewController alloc] init];
    self.subscriptionVc = subscriptionVc;
    
    NotificationViewController * notificationVc = [[NotificationViewController alloc] init];
    self.notificationVc = notificationVc;
    
    MeViewController * meVc = [[MeViewController alloc] init];
    self.meVc = meVc;
    
    NSArray *viewControllers = @[homeVc, subscriptionVc, notificationVc, meVc];
    
    for (int i = 0; i < viewControllers.count; i++) {
        UIViewController *childVc = viewControllers[i];
        //添加子视图
        [self SetupChildVc:childVc title:titles[i] image:images[i] selectedImage:selectedImages[i]];
    }
}

项目地址:https://pan.baidu.com/s/1-2IxzrRdiSnrc3Qq4uDznA

相关文章

网友评论

      本文标题:项目中编程的一些小思想

      本文链接:https://www.haomeiwen.com/subject/qccnxftx.html