点符号混乱

时间:2015-12-06 02:29:14

标签: objective-c syntax

在学习了一些Objective-C之后,我仍然对点符号感到困惑。

我理解在" setters"中使用点符号。和" getters",我对那部分感到满意​​。但是,每当我没有设置或获取值时,我都习惯使用_varableName。我的代码中的一些例子:

.h档案:

@property (nonatomic,strong) LoginWindowController *loginWindow;
@property (nonatomic,strong) MainWindowController *mainWindowController;

.m档案:

_loginWindow = [[LoginWindowController alloc] initWithWindowNibName:@"LoginWindowController"];
[[_mainAppViewController view]removeFromSuperview];

我应该在上面的例子中使用点符号吗?出于某种原因,我没有看到使用self.loginWindowself.mainAppViewController的意义。

2 个答案:

答案 0 :(得分:1)

最佳做法是在获取/设置属性时使用点表示法(init方法除外)。

为什么?

使用点表示法(或值/ setValue :)强制执行属性属性("非原子"和#34;强"位),而直接访问则绕过它们。 KVO还要求您使用该属性才能正常工作。

您不能在init方法中使用它,因为子类可能会覆盖这些方法并处理尚未正确初始化的代码。

答案 1 :(得分:1)

您感到困惑的原因是ARC正在为您管理内存。事情并非如此。

因此,在过去,访问器方法(属性和点符号真正给你的)具有实际的内存管理代码。如果您绕过访问器并直接访问实例变量,那么当您搞乱内存管理时,您就会遇到麻烦,现在由您决定。因此,通常使用accessor / property / dot-notation会更好。

然而,现在,ARC会介入并为您提供强引用内存管理,即使直接分配给实例变量也是如此。因此,虽然它不是一个好习惯,但惩罚并不那么明确。