为了实现良好的封装,像样的Objective-C
程序员将他们的private
ivars放在主实现文件中声明的私有extension
中,如下所示:
// MyClass.m
@interface MyClass () {
float value;
}
@end
@implementation MyClass
@end
但最近,我发现了一种更简单的隐藏private
ivar的方法:ivar可以在@implementation
后面的{}
块中声明,如下所示:
// MyClass.m
@implementation MyClass {
float value;
}
@end
当不需要隐藏私有方法而只需要隐藏private
ivar时,它真的很方便。
然而,我不确定它的语法有效性。任何人都可以通过一些规范的引用来验证或无效它吗?
发布于 2012-01-14 00:18:16
这是完全有效的,下面是苹果公司的一份文件:
我个人并不使用它,因为我更喜欢类延续类别的语法。
发布于 2013-06-06 17:17:49
我对此也很好奇。Here is the updated link from Apple
您可以在没有属性的情况下定义实例变量
最佳实践是在任何需要跟踪值或其他对象的时候使用对象上的属性。
如果您确实需要在不声明属性的情况下定义自己的实例变量,则可以将它们添加到类接口或实现顶部的大括号中,如下所示:
@接口SomeClass : NSObject { NSString *_myNonPropertyInstanceVariable;} ... @end @implementation SomeClass { NSString *_anotherCustomInstanceVariable;} ... @end
https://stackoverflow.com/questions/8853585
复制相似问题