美文网首页
iOS 工程中特定条件下唯一存在的对象

iOS 工程中特定条件下唯一存在的对象

作者: 盲果冻 | 来源:发表于2017-11-09 01:15 被阅读57次

最近项目中碰到这样一个场景:用户A进入某个好友B个人主页,从B粉丝列表中进入其中另一个好友C个人页面,从C又可以再次进入B个人主页,就这样循环进入同一个人的个人主页(虽然觉得不合理,现实就是如此(´・_・`)),这时出现了一种情况,在B个人主页做某些操作,影响了B的一些属性,当前页面已经产生效果,但是在其他的B个人页面属性却保持旧值,通常用通知来让前面的页面获取属性新值,可是感觉好麻烦╮("" ̄▽ ̄"")╭,那有什么办法,让一个ID的用户对象在工程中永远只存在一份呢?

应需要想到一个比较拙的办法大致方向如下:
1、私有化init/new等原初始化方法跟指定新的初始方法(比较条件为输入参数)

- (instancetype)init __attribute__((unavailable("Disabled. Use -initWithID: instead")));
+ (instancetype)new __attribute__((unavailable("use object initializers instead")));

- (instancetype)initWithID:(NSString *)userID NS_DESIGNATED_INITIALIZER;

2、在LYFriendInfoModel.m中定义一个静态的NSMapTable记录同样条件下已存在的对象

static NSMapTable *friendsMapTable;

modelsMapTable = [[NSMapTable alloc] initWithKeyOptions:NSPointerFunctionsStrongMemory valueOptions:NSPointerFunctionsWeakMemory capacity:0];

其中NSMapTable的设置:ID为key,对value的持有方式是weak,即只是引用,这样才能确保一个对象无外部显示持有时即被释放

3、在初始化方法中先通过friendsMapTable查找是否有符合条件的对象,有的话直接返回

- (instancetype)initWithID:(NSString *)userID {
    if (userID == nil) {
        return nil;
    }
    LYFriendInfoModel *model = [friendsMapTable objectForKey:userID];
    if (model) {
        return model;
    }
    if (self = [super init]) {
        self.userID = userID;
        [friendsMapTable setObject:self forKey:userID];
    }
    return self;
}

现在项目使用过程中,一般直接使用Json转换模型库(json字串-> NSDictionary->Model),也需要改动下:
1、优先选择使用指定的初始化方法进行初始化
2、1存在的话,提供对应的初始化方法的输入参数字段名称数组
3、设置优先赋值的属性字段名称数组 -- 非必需,只是这次也干脆处理了

这样就基本在项目中够用了(后面同样的方式用在了从相册中重复获取同一张图片的操作,避免了各种手动查找)。。。如果有更好的方式方法麻烦告诉下我哦~~~感觉还是稍许麻烦

相关文章

  • iOS 工程中特定条件下唯一存在的对象

    最近项目中碰到这样一个场景:用户A进入某个好友B个人主页,从B粉丝列表中进入其中另一个好友C个人页面,从C又可以再...

  • 林州市,最爱红旗渠

    ―华北水利水电大学环境与市政工程学院弘扬“林州红旗渠精神”实践团队 红旗渠是在特定的历史条件下、特定的环境中、特定...

  • iOS面试题:单例会有什么弊端?

    原文:iOS面试题大全 主要优点: 1、提供了对唯一实例的受控访问。 2、由于在系统内存中只存在一个对象,因此可以...

  • iOS面试题:iOS 消息调用过程

    iOS 消息调用属于基本知识,苹果官方有一个详细的介绍图: iOS 工程中,调用对象的方法,就是向对象发送消息。我...

  • iOS逆向开发学习资料整理

    小黄书--iOS逆向工程开发唯一指定论坛,各种大神出没;Theos的官方文档地址iOS逆向工程简介(详解)iOS ...

  • JavaSE笔记(二)面向对象

    什么是对象 1.对象的概念:对特定一个存在事物2.什么是面向对象:以自我为中心对待一个特定事物存在,需要自己描述出...

  • 架构

    唯一可行的 iOS 架构 iOS App 的最佳架构,存在吗?

  • 药品防潮包装微生物限度控制菌检查法

    药品防潮包装微生物限度控制菌检查法系用于在规定的实验条件下,检查供试品中是否存在特定的微生物。 ...

  • js :width语法

    文档中提到:with 语句用于设置代码在特定对象中的作用域。列子: 如果b存在则width语块中的会将指定的对象b...

  • 《iOS设计模式解析》总结

    《iOS设计模式解析》设计模式是面向对象编程中的概念,是一个对象或类的设计模板,用于解决特定领域经常发生的问题。 ...

网友评论

      本文标题:iOS 工程中特定条件下唯一存在的对象

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