【发布时间】:2013-03-03 03:37:26
【问题描述】:
我目前正在为 iOS 创建一个客观的 c 框架,以帮助促进 API 和开发人员之间的交互。作为其中的一部分,我返回了各种只读对象数组,开发人员可以使用这些数组向用户显示信息。但是,我想确保向用户显示的对象仅来自框架,并且不能由使用框架的开发人员实例化。
我当前的实现使用了一个自定义的 constructor 初始化器,它从 api 获取 JSON 来实例化自己。我知道访问我的自定义 constructor 初始化程序的唯一方法是将其定义放在头文件中,这样不仅我自己可以访问它,开发人员也可以访问它。我知道当用户尝试使用默认的 constructor 初始化程序 -(id)init; 时,我可能会引发不一致异常,但我无法阻止他们创建自己的 JSON 字符串并调用我的自定义 构造函数初始化器。
我是否采取了正确的方法来保护我的私有框架免受使用它的开发人员的干扰?我还能如何解决这个问题以确保这些对象中数据的有效性?
来源:Is it possible to make the -init method private in Objective-C?
【问题讨论】:
-
这似乎有点像一场失败的战斗。正如您所读到的,实际上没有办法阻止其他类在您的对象上调用某个方法。为什么除了你之外没有一个类被实例化如此重要?作为一种极端措施,如果您从 Web 服务获取数据,您可以在服务器端对 JSON 进行加密签名,并在使用框架内的对象之前检查签名。但这似乎有点像XY Problem。
-
取决于我们最终是否会遇到开发人员尝试绕过我们的框架的问题,这可能是我们将来考虑使用的路线。感谢您的建议。
标签: objective-c frameworks constructor instantiation data-protection