是否可以在方法中为其类实例的生命周期 创建一个局部范围的变量?
我不能使用static
,因为它将在所有类实例之间共享,这不好。本质上,我想保护一个实例变量,使其只能由类中的一种特定方法访问。
我认为这真的无法做到,但我想我会问,因为它会有很大帮助。
更新
所以,我将@dasblinkenlight 的答案标记为正确(确实如此)。尽管@joshcaswell 在评论中提供了对更好答案的参考,但这是Richard J. Ross III 对关联引用的实际实现。这提供了一种更简单的方法来关联引用,而无需深入运行时(因为他会为你做这件事)。如果我在最初的搜索中找到了这个答案,我一开始就不会问这个问题。但我没有,所以我做到了。
为什么这样做?
我今天看到了 Brent Simmons 的一篇文章,名为Why is Using Associated Objects a Hack?,这与为什么我首先需要这样做的问题直接相关在我与@dasblinkenlight 的评论讨论中,我解释说我想保护一个延迟实例化的 iVar 不被直接访问,除非它的构造函数方法。最好的方法是对所有其他类方法隐藏 iVar,以便只能通过它的构造函数方法访问它。当然,您可以依靠命名约定(即:_lazyiVar)来提醒你不要直接访问它,但这是(IMO)一种相当脆弱的保护形式(我过去做过这件事)。使用关联引用是一种 hack,您应该质疑直接访问运行时的技术,但在这种情况下,我更喜欢 hack,因为它通过保护我延迟实例化的变量,使我的代码不太可能崩溃。