我想在MyClass.m文件中定义私有实例变量。在我看来,有两种方法可以做到:
使用类扩展
@interface HelloViewController ()
{
int value;
}
在@implementation部分中定义
@implementation HelloViewController
{
int value;
}
哪个更好?
我认为最近Apple的编码风格是使用类扩展吗?
e.g。 MasterViewController.m由'Master-Detail Application Template'生成
@interface MasterViewController () {
NSMutableArray *_objects;
}
@end
答案 0 :(得分:48)
“现代Objective-C”方法是在你的实现块中声明它们,如下所示:
@implementation ClassName {
int privateInteger;
MyObject *privateObject;
}
// method implementations etc...
@end
请参阅我之前发布的this更多详情。
答案 1 :(得分:8)
@interface HelloViewController ()
{
@private //optional, this is old style
int vale;
}
但是,如果您正在创建一个库,理论上没有人会知道您未在头文件中声明的任何方法。
复制自:How to make a real private instance variable?
在@implementation中声明实例变量是最近的 Obj-C的功能,这就是为什么你会看到很多代码的原因 @interface - 别无选择。
如果您使用的是支持声明实例的编译器 实现中的变量声明它们可能是 最佳默认值 - 如果需要,只将它们放在界面中 被他人访问。
实现中声明的实例变量是隐式的 隐藏(实际上是私有的)并且无法更改可见性 - @ public,@ protected和@private不会产生编译器错误(使用 目前的Clang至少)但被忽略了。
答案 2 :(得分:0)
在我看来,最好的办法是将其定义为私有属性,您可以在实现中将其作为字段或属性来访问,优点是可以通过self以及_fieldName语法访问它们,这在某些情况下很方便
@interface SignUpController ()
@property ViewHeaderView*header; //private properties/fields
@property UITextField*activeField;
@property CGFloat keyboardHeight;
@end
@implementation SignUpController {
}
@end