根据我的理解,setter和getter用于设置类范围之外的变量值。这似乎很有用,因为您可能希望使用封装隐藏代码。
然而,当你从类外注入和操纵值时,这种方法肯定会违背封装理论吗?
在OOP中使用setter和getter的正确时间是什么时候? (任何类比都会很棒)
它们是在主文件还是接口文件中定义的?因为你似乎想要在.h文件中定义一个setter和getter,然后在.m文件中设置变量的实际使用。
最后,为什么你看到getter方法只是返回他们得到的变量?当然这已经由主文件实现完成了。
总的来说,我只想真正澄清吸气剂和制定者,以及它们为何如此有用。
三江源
答案 0 :(得分:2)
如果你同时为一个变量设置了setter和getter,那么你可以在课堂外改变它。
有正确的问题 - 为什么这样做?
由于代码的可重用性和“敏捷性”。
1)检查正确的输入
如果您想设置人的年龄,您可以在设置器中检查该值是否大于零。
2)可重用性
想象一下,您创建的程序(其中包括)连接到服务器,接收位数组并从该数组创建整数。然后你用这个整数做一些事情,你从几个地方设置这个值。
但服务器更改从little-endian发送到big。如果您使用了setter和getter,则可以在保存之前更改setter以对其进行转换。或者你可以改变你的吸气剂以获得正确的输出。
答案 1 :(得分:1)
让我们说使用setter和getter没有“错误”的时间,因为它们可以为您提供额外的控制(内存管理等)。正如libik所提到的,值的验证对于防止程序“陷入”不一致状态非常重要,无论您设置自我计算的值还是用户输入。使用setter通常不仅意味着在ivar中存储值,而且可能导致在设置值时需要执行其他操作。隐藏代码非常重要,因为您不希望幕后的所有操作都显而易见。而setter也让你有机会返回,例如一个布尔值,表示是否可以正确设置值。
如果还没有完成,那么getter会让你有机会懒洋洋地实例化“按需”对象,而不是总是创建假设以后可能需要它们的对象。
- (Object *) myObject {
if (!_myObject) {
_myObject = [[Object alloc] init];
}
return _myObject;
}
无论您是在.h还是.m文件的界面中定义setter和getter,都取决于您的需求。可能存在这样一种情况:您希望您的setter是私有的(在.m文件中)并且只公开您的getter,因为根据某些状态更改,您的实现中的值会发生变化,反之亦然。