这个惯例有什么目的吗?
答案 0 :(得分:2)
有些开发人员通过以下方法使用以下“隐藏”ivars的惯例:
@interface
@private
NSString *_myString
@property (nonatomic, retain) NSString *myString;
@implementation
@synthesize myString = _myString.
这样做是禁止通过属性myString强制所有访问来直接访问ivar。它是一种隐藏类内部并遵循面向对象的封装原则的方法。
答案 1 :(得分:0)
避免使用下划线字符作为私有的前缀,尤其是在方法中。 Apple保留使用此约定。第三方使用可能导致名称空间冲突;他们可能会无意中用自己的方法覆盖现有的私有方法,带来灾难性的后果。
根据Coding Guidelines for Cocoa保留以下划线开头的方法名称(这意味着即使您不使用Cocoa,它们也会被保留):
以“_”开头的方法名称(单个下划线字符)保留供Apple使用。
此外,C / C ++约定是(通常)为实现保留前导下划线。很多人误解了这一点,并使用_表示“私人”;导致_FooLog()调用在我们的大量代码库中激增,即使它调用未定义的行为。
这样做的唯一原因是不鼓励在自己的班级中直接进行ivar访问。使用@private
阻止来自其他课程的ivar访问。