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

一、简介

在使用第三方 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 访问第三方私有属性的技巧)