直接访问实例变量时使用self-> ivar

Jon*_*ing 8 objective-c

我注意到大多数Objective-C编码器self->ivar在直接访问实例变量时从不使用语法.我看到的大多数示例代码只引用了实例变量而没有self->.我认为引用实例变量而不清楚它是一个实例变量而不仅仅是当前范围的变量是相当混乱的.

我觉得我想写下这样的东西:

- (void)dealloc {
    [self->someVar release];
    [self->anotherVar release];
    [super dealloc];
}
Run Code Online (Sandbox Code Playgroud)

要么

- (void)setVar:(Foo *)newVar {
    [self->var autorelease];
    self->var = [newVar retain];
}
Run Code Online (Sandbox Code Playgroud)

在没有使用访问器进行封装​​的情况下甚至不应该访问我们的实例变量的情况并不是很多,但有时我们需要在dealloc或者自定义getter和setter中.

这样做我是一个坏人/程序员吗?是不是有一些很好的理由不写这样的代码?因为这样做感觉非常好.

Chu*_*uck 7

没有理由你不应该这样写.我认为人们倾向于以另一种方式写它,因为他们试图避免影响他们的ivars,所以他们所谈论的变量不应该有任何歧义 - 而且它更短.


Qui*_*lor 7

Chuck是正确的,因为没有技术上的理由你不应该这样写,除非你用局部变量遮蔽ivars,这通常是一个坏主意.然而,可以说,省略self->在风格上更清晰,并且它肯定会导致更简洁的代码.就个人而言,我会发现它self->会分散注意力(特别是如果代码设计得很好并且变量名称很好)但是如果它让事情更容易理解,那么一定要做.请注意,如果您向其他Objective-C程序员展示您的代码,他们可能会有一个相互矛盾的意见,所以有一个思考皮肤是好的.此外,大多数程序员发现他们对代码"感觉良好"的看法会随着时间的推移和经验而发生变化,而这些意见往往随着年龄的增长而变得圆满.:-)

  • 就像我说的那样,它更短.我更喜欢它,但我无法证明较短的标识符总是更好,但是 - 我讨厌维护所有x,y和z的代码.所以这基本上是你找到快乐媒体的地方.我怀疑Pythonist可能更喜欢`self->`形式.当然,不管怎样,你不应该经常在Objective-C中进行直接的ivar访问.也许没有吸引力的是"自 - >"语法的另一个优点. (2认同)