这个问题已经被问了很多次,但这个问题是为了获取何时使用这些方法的示例。请使用 setter 和 getter 无限循环以外的示例
例子。
.h -
@property(nonatomic, strong)NSMutableArray* mutArray
.m -
@synthesize mutArray= _mutArray;
1)我想要:
_mutArray = [[NSMutableArray alloc] init];
OR
self.mutArray=[[NSMutableArray alloc] init];
为什么我要分别做这些,有什么区别?!
2)如果我想向其中添加一个对象......
[_mutArray addObject:object];
OR
[self.mutArray addobject:object];
为什么?!
非常感谢!
你应该只处理你的ivarsinit
and dealloc
或者实现细节绝对需要的地方(例如访问器本身的内部,或者您实际需要内存地址的地方)。除了这些地方之外,您应该始终使用访问器,这意味着[self foo]
而不是_foo
.
self.foo
只是实际调用周围的语法糖,即[self foo]
。重要的是要明白self.foo
是一个标准的 ObjC 消息发送,其含义与[self foo]
。按照惯例,在引用属性时应该只使用点语法。
根据我的经验,ARC 之前,直接使用 ivars 是导致崩溃的第一大原因。在程序范围内直接分配给没有 ARC 的 ivar 时,搞砸的可能性很快接近 100%。
自 ARC 以来,我仍然认为您应该始终使用访问器(上面给出的例外),但原因更为微妙。其主要原因是访问器可以在当前类、子类中或通过 KVO(完全发生在代码之外)进行定制。如果你直接访问ivar,那么你将绕过这个。例如,假设该属性是延迟创建的(这很常见)。然后,如果您在创建 ivar 之前使用它,则会出现微妙的错误。因此,您必须记住,对于该属性,始终使用访问器。同样,您可能会调用setNeedsDisplay
或发布通知等。
如果您有一条简单的规则“我将始终使用访问器”,那么很容易查看代码并知道它是正确的。在少数情况下,您需要绕过访问器,_
说:“嘿,注意这里,我在做一些奇怪的事情。”
如果您有一条规则“我将对需要它的属性使用访问器,但不会对不需要的属性使用访问器”,那么几乎不可能查看代码并知道它是否正确。之前的开发人员使用 ivar 是因为需要,还是只是因为他喜欢?能改还是不能改?这很难知道。
因此,即使在 ARC 之后,始终如一地使用访问器也是很好的防御性编程,我强烈推荐它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)