简单的问题,我只想听听其他人做什么,最好的做法是什么。
在我的一个视图控制器中声明实例变量时。申报的合适地点在哪里?我希望实例变量可用于视图控制器中的所有方法/函数
我看到它是这样做的,在@interface
:之后的大括号中的.h
文件中
@interface ViewController : UIViewController {
NSString *test3;
}
我看到它是这样做的,在@interface
:之后的大括号中的.m
文件中
@interface ViewController () {
NSString *test1;
}
我看到它是这样做的,在.m
文件中,@implementation
:之后用大括号
@implementation ViewController {
NSString *test2;
}
最佳实践是什么?有什么不同吗?如果是这样的话,它们可能是什么,是什么让一种方式比另一种方式更好?
我们将感谢所有的帮助,谢谢
其中任何一个都可以,但当前的最佳实践是使用属性。如果你想让它只能在你的班级内部访问:
@interface ViewController ()
@property (copy, nonatomic) NSString *test1;
@end
一个像这样的访问:
self.test1 = @"Hello, world";
但是,如果您希望其他类也可以访问它,请将它放在公共接口中:
@interface ViewController : UIViewController
@property (copy, nonatomic) NSString *test1;
@end
然后像这样访问它:
someInstanceOfViewController.test1 = @"Hello, world";
如果您需要直接访问实例变量(在大多数情况下,这只适用于类内部),例如,如果您正在制作自定义setter,编译器将自动合成一个ivar,该ivar是以下划线为前缀的属性名称:
- (void)setTest1:(NSString *)test1
{
_test1 = [test1 copy];
}
注意:copy
是因为您可能会将test1
设置为NSMutableString
的实例,并且您可能不希望它的内容从您的下面突变出来。当您覆盖setter时,如上所述,您必须自己强制执行这个copy
语义。