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

  • 对于界面中的某些存储,或者某些繁琐的判断,或者影响主架构的代码,不应该将其暴露在外边。所以需要建一些特殊的类,专门终于这些事情的处理。我们把这些类称为工具类。

  • 所谓工具类,是独立的,不依靠任何对象。继承自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;
}

你可能感兴趣的:(关于抽取工具类思想-数据持久化的考虑)