美文网首页
iOS 访问第三方私有属性的技巧

iOS 访问第三方私有属性的技巧

作者: CoderHG | 来源:发表于2018-04-14 15:04 被阅读76次

    一、简介

    在使用第三方 SDK 的情况下,难免也需要在其基础上做一些调整,有的时候需要修改其私有的属性。这种情况应该怎么处理呢?

    一个场景模拟: 在一个 SDK 中,有一个 Class 是 HGObject,有一个私有属性是 name。现在想要操作这个 name。

    二、具体的方案

    具体的方案有两种:

    • 1、使用 KVC
    • 2、使用分类

    接下来分别介绍一下。

    2.1 使用 KVC

    这个方案,应该是很多人使用的,代码类似于这样的:

    { // 通过 KVC 访问私有属性
            HGObject* obj = [[HGObject alloc] init];
            
            // KVC 设置值
            [obj setValue:@"KVC_Value" forKey:@"name"];
            // 通过 KVC 获取值
            NSString* value = [obj valueForKey:@"name"];
            NSLog(@"通过 KVC 获取的值是 : %@", value);
        }
    

    这种方式,在使用上很简单,毕竟 KVC 是 OC 的固有特性。

    2.2 使用分类

    直接创建一个分类,然后重新再分类中申明一个同样的属性。然后在使用的时候与公开的属性一致。代码类似于这样:

    { // 通过分类操作私有属性
            HGObject* obj = [[HGObject alloc] init];
            obj.name = @"Category_Value";
            
            NSLog(@"通过分类操作私有属性 = %@", obj.name);
        }
    

    三、特别提醒

    一旦由于 SDK 的升级在内部将私有属性删除,那么两种方案均会闪退。所以每次 SDK 升级之后一定要做好复查。为了避免闪退,每次调用都应该使用 respondsToSelector: 。具体可以参考我的代码:OC2Nature项目中 HGPrivate 目录
    有更多更好的方案, 欢迎讨论!

    我的更多文章,可以直接看这里NewStart NewStart NewStart

    谢谢!

    相关文章

      网友评论

          本文标题:iOS 访问第三方私有属性的技巧

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