在一个方法中创建一个本地作用域变量,使其在类实例的生命周期内存在,这种做法是否可行?我不能使用static,因为它会被所有类实例共享,这样不好。实际上,我想通过使一个实例变量只能被类中的一个特定方法访问来保护它。
我认为这似乎是不可能的,但我想问一下,因为这会帮助很多人。
更新 所以,我将@dasblinkenlight的答案标记为正确的(确实是这样)。尽管@joshcaswell在评论中提供了更好的答案参考,这是Richard J. Ross III的关联引用实际实现。这提供了一种更简单的方法来关联引用而不必深入运行时(因为他已经为您做了)。如果我在最初的搜索中发现了这个答案,我就不会首先提出这个问题。但是我没有,所以我提出了这个问题。
为什么要这样做? 今天我看到了Brent Simmons的一篇文章,题为为什么使用关联对象是一种hack?,这直接涉及到我为什么需要首先这样做的问题(@bbum和@GabrielePetronella问了这个问题)。在我的与@dasblinkenlight的讨论中,我解释了我想要保护一个懒惰实例化的iVar不被直接访问,除了它的构造方法。这样做的最佳方式是隐藏iVar,使所有其他类方法都无法访问它,因此只能通过其构造方法访问它。当然,您可以依赖命名约定(即:_lazyiVar)来提醒您不要直接访问它,但这是一种相当脆弱的保护形式(而且我过去确实做过这件事)。使用关联引用确实是一种hack,您应该质疑直接访问运行时的技术,但在这种情况下,我更喜欢这种hack,因为它通过保护我的懒惰实例化变量使我的代码更不容易崩溃。
我认为这似乎是不可能的,但我想问一下,因为这会帮助很多人。
更新 所以,我将@dasblinkenlight的答案标记为正确的(确实是这样)。尽管@joshcaswell在评论中提供了更好的答案参考,这是Richard J. Ross III的关联引用实际实现。这提供了一种更简单的方法来关联引用而不必深入运行时(因为他已经为您做了)。如果我在最初的搜索中发现了这个答案,我就不会首先提出这个问题。但是我没有,所以我提出了这个问题。
为什么要这样做? 今天我看到了Brent Simmons的一篇文章,题为为什么使用关联对象是一种hack?,这直接涉及到我为什么需要首先这样做的问题(@bbum和@GabrielePetronella问了这个问题)。在我的与@dasblinkenlight的讨论中,我解释了我想要保护一个懒惰实例化的iVar不被直接访问,除了它的构造方法。这样做的最佳方式是隐藏iVar,使所有其他类方法都无法访问它,因此只能通过其构造方法访问它。当然,您可以依赖命名约定(即:_lazyiVar)来提醒您不要直接访问它,但这是一种相当脆弱的保护形式(而且我过去确实做过这件事)。使用关联引用确实是一种hack,您应该质疑直接访问运行时的技术,但在这种情况下,我更喜欢这种hack,因为它通过保护我的懒惰实例化变量使我的代码更不容易崩溃。