我知道我可以使用@private 关键字来声明我的实例变量私有。我相信它只会在编译时强制执行。
你知道有什么方法可以阻止其他用户在运行时访问我的私有变量吗?
我问这个是因为我正在构建一个静态库,它将分发给其他开发人员,我不希望他们访问我的私有变量。
我知道我可以使用@private 关键字来声明我的实例变量私有。我相信它只会在编译时强制执行。
你知道有什么方法可以阻止其他用户在运行时访问我的私有变量吗?
我问这个是因为我正在构建一个静态库,它将分发给其他开发人员,我不希望他们访问我的私有变量。
您无法阻止一个有决心的人在运行时弄乱数据(一旦他们知道内存中对象的地址并且它位于当前进程可自由写入的已分配空间中,总有办法改变它)。您可能做的最好的事情就是混淆它,例如只显示 a void*
,在其他地方分配内存并强制转换。
您可以在 .m 文件的类扩展中声明实例变量,而不是在(公共).h 文件中使用 @private。正如@KevinGrant 正确所说,这也不会阻止有决心的人访问它,但至少其他人不会看到声明(我认为调试器不会显示它)。
补充:参见例如Objective C - Make iVars hidden以讨论关于该主题的内容。
我不认为您可以在运行时阻止其他人访问私有变量。因为其他人可以使用 KVC 和 KVO 来获取和更改您的私有变量。也许你可以在你的私有变量之间建立很多关系,如果其他人改变它,他们会得到错误的答案,也许它可以阻止其他人改变你的私有变量