在学习了一些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.loginWindow
或self.mainAppViewController
的意义。
答案 0 :(得分:1)
最佳做法是在获取/设置属性时使用点表示法(init方法除外)。
为什么?
使用点表示法(或值/ setValue :)强制执行属性属性("非原子"和#34;强"位),而直接访问则绕过它们。 KVO还要求您使用该属性才能正常工作。
您不能在init方法中使用它,因为子类可能会覆盖这些方法并处理尚未正确初始化的代码。
答案 1 :(得分:1)
您感到困惑的原因是ARC正在为您管理内存。事情并非如此。
因此,在过去,访问器方法(属性和点符号真正给你的)具有实际的内存管理代码。如果您绕过访问器并直接访问实例变量,那么当您搞乱内存管理时,您就会遇到麻烦,现在由您决定。因此,通常使用accessor / property / dot-notation会更好。
然而,现在,ARC会介入并为您提供强引用内存管理,即使直接分配给实例变量也是如此。因此,虽然它不是一个好习惯,但惩罚并不那么明确。