美文网首页JC专题
关于抽取工具类思想-数据持久化的考虑

关于抽取工具类思想-数据持久化的考虑

作者: Little_Dragon | 来源:发表于2015-07-28 23:09 被阅读172次
    • 对于界面中的某些存储,或者某些繁琐的判断,或者影响主架构的代码,不应该将其暴露在外边。所以需要建一些特殊的类,专门终于这些事情的处理。我们把这些类称为工具类。

    • 所谓工具类,是独立的,不依靠任何对象。继承自NSObject 。(耦合性低) 调用时,也应该及其方便才行。 一般最好用类方法 设置接口。 有点像 蒙版(HUD)的样式。 (个人认为它就是一个工具)。 (我也不是很确定,但是自己觉得这个工具类应该可以说是一种单例模式的体现了吧)。

    • 对于类的名字,应该尽量浅显 ,明了。

    • 如果不会写的话,可以看外边是怎么用的, 必要的时 模仿苹果的方法做法。

    • 比如封装偏好设置的 存储类。 可以仿照苹果的做法[ [ NSUserDefaults standardUserDefaults] setObject:id forKey:@“”];

    那么我就可以让自己的工具类 ToolSave 设置一个类方法 + (instancetype)setObject:(id)id forKey:(NSString *)string;
    它的实现可以这样写,让其内部调用系统方法即可,(相当于骗一骗用户,或者不懂的人,但这种思维是必须要有的,因为你的方法名,必须要有依有据)
    实现:

     + (instancetype)setObject:(id)id forKey:(NSString *)string
         {
              return [ [ NSUserDefaults standardUserDefaults] setObject:id forKey:string];
    
              }
    

    那么外边调用的时候,只需有头文件导入然后 直接 调用 [ToolSave setObject: forKey:];就可以进行数据的存储。

    • 对于繁琐的判断,使外界的代码,缺少了生命。 那么我们就要给它赋予生命,以浅显易懂的方法名字(基本都是模仿苹果的方法名字),外界简练的代码,实现相同的功能。

    • 举个例子吧。

    #import "AppDelegate.h"
    #import "LXLTabBarController.h"
    #import "LXLLaunchViewController.h"
    #import "SaveTool.h"#import "RootTool.h"
    @interface AppDelegate ()
    @property(copy,nonatomic)NSString *lastVision;
    @end
    @implementation AppDelegate
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {       self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
       
      
         self.window.rootViewController = [RootTool rootVc];
        
    // 对与以下的判断展示给外界让人看到,就有点烦
    // 如果能够简练到, 创建主窗口 -> 设置主窗口的根控制器 -> 显示主窗口 就最好了。 蓝色部分就是 整改后的代码 。 如果将黄色部分都去掉的话,那么此处的代码是不是很具有生命。
      /* NSString *curVision = [NSBundle mainBundle].infoDictionary[@"CFBundleShortVersionString"];    
    NSLog(@"%@",curVision);      
     _lastVision = [SaveTool objectForKey:@"vision"];             
     if (![_lastVision isEqualToString:curVision]) {
    
            LXLLaunchViewController  *colVc = [[LXLLaunchViewController alloc]init];        
    colVc.view.backgroundColor = [UIColor redColor];        
    colVc.collectionView.backgroundColor = [UIColor redColor];        
    self.window.rootViewController = colVc;        
    [SaveTool setObject:curVision forKey:@"vision"];       
     _lastVision = curVision;    }
    else       {
    LXLTabBarController *tabVC = [[LXLTabBarController alloc]init];          
     self.window.rootViewController = tabVC;}  */    
     [self.window makeKeyAndVisible];          
    return YES;
    }
    
    • 工具类 RootTool
    • 方便外界的调用 “+ (instancetype) rootVc;"
    • 对于方法的实现
    • 当然还有导入他们相关的头文件了, 这个工具并不是很完美。(耦合性有点强),但是在精炼就有点不容易了,对比以前的做法,应该好多了吧。
    • 有没有注意到,工具类其实很简单,外界怎么使用方便,内部就进行去实现,需要的参数,直接让外界给你传,完善自己的类。
    + (instancetype)rootVc
    {
           NSString *curVision = [NSBundle mainBundle].infoDictionary[@"CFBundleShortVersionString"];
        NSLog(@"%@",curVision); 
          
    NSString *lastVision = [SaveTool objectForKey:@"vision”
    ];
    
        UIViewController *vc;   
     if (![lastVision isEqualToString:curVision]) {
          
            vc = [[LXLLaunchViewController alloc]init];              
    vc.view.backgroundColor = [UIColor redColor];
         
            [SaveTool setObject:curVision forKey:@"vision"];
           
            lastVision = curVision;
            return vc;
        }else
        {
              vc = [[LXLTabBarController alloc]init];
        }
    return vc;
    }
    

    相关文章

      网友评论

        本文标题:关于抽取工具类思想-数据持久化的考虑

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