iOS Manager 解析json

先从单例开始

1.在iOS开发过程中,需要使用到一些全局变量以及管理方法,可以将这些变量以及方法封装在一个管理类中,这是符合MVC开发模式的,这就需要使用单例(singleton)。

2.使用单例模式的变量在整个程序中只需要创建一次,而它生命周期是在它被使用时创建一直到程序结束后进行释放的,类似于静态变量,所以我们需要考虑到它的生命周期,唯一性以及线程安全。在这里,我们需要实用GCD来实现单例模式:
这一点是个人感觉是很有优点的就是只有一次那么我们可以在manger中写不同的方法进行不同的json解析这一点自我感觉大大提升了运行效率,那么如何现在就需要对他进行加锁,就是为了让他只创建一次

#import “Manager.h”

static Manager *manager = nil;

@implementation Manager

  • (instancetype)sharedSingLeton {
    if (!manager) {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
    manager = [Manager new];
    });
    }
    return manager;
    }
    @end

这里我们可以对他创建写成类方法,以后直接通过类名创建就好
即使在多线程的环境下,dispatch _once也可以保证线程安全。 ,用在这里就是只创建一次manger,不会创建不同的manger
Static修饰全局变量
当static关键字修饰全局变量时,作用域仅限于当前文件,外部类是不可以访问到该全局变量的。 默认情况下,全局变量在整个程序中是可以被访问的(即全局变量的作用域是整个项目文件),如果不加static,那只能存在一个名为manager的变量。

然后接下来就可以运用manger进行传值解析
如下在这里插入图片描述
块变量的定义方式是:
返回值类型(^块变量名)(形参类型)。 他首先定义了一个块变量类型

然后在.m文件中写了网络请求的方法:如下

- (void)fetchLatestDailyDataWithSucceed:(DBILatestBookDataHandle)succeedBlock error:(ErrorHandle)errorBlock {
       NSString * latestDailyDataURLStr = [NSString stringWithFormat:@"https://douban.uieee.com/v2/movie/in_theaters"];
    NSURL * latestDailyDataURL = [NSURL URLWithString:latestDailyDataURLStr];
       //封装一个请求类
    NSURLRequest * latestDailyDataRequest = [NSURLRequest requestWithURL:latestDailyDataURL];
      //创建Session
    NSURLSession *latestDailyDataSession = [NSURLSession sharedSession];
    NSURLSessionDataTask *latestDailyDataTask = [latestDailyDataSession dataTaskWithRequest:latestDailyDataRequest completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        if (error == nil) {
               NSDictionary* resultDic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
            
            DBBookPageModel * latestBookDataModel = [[DBBookPageModel alloc] initWithDictionary:resultDic error:&error];
               succeedBlock(latestBookDataModel);
        }
        else {
        }
    }];
    [latestDailyDataTask resume];

}

这样使用是非常方便的接下来就是在你所想调用的地方实现manger的实例化并且接下来调用解析方法即可如下
- (void)updateBookCommit {
[[DBBookPageManager sharedManager]fetchLatestDailyDataWithSucceed:^(DBBookPageModel * _Nonnull latestDataModel) {
//此时解析的数据就是 latestDataModel 就可以进行调用了
} error:^(NSError * _Nonnull error) {
NSLog(@“添加失败”);

}];

}

发布了34 篇原创文章 · 获赞 4 · 访问量 730

猜你喜欢

转载自blog.csdn.net/weixin_44824650/article/details/102756482
今日推荐