简单的问题,我只想听听别人做了什么,以及最佳做法。澄清一些事情。
在我的一个视图控制器中声明实例变量时。宣布它的适当场所在哪里?我希望实例变量可用于视图控制器中的所有方法/函数
我已经在.h
之后的花括号的@interface
文件中看到了这种方式:
@interface ViewController : UIViewController {
NSString *test3;
}
我已经在.m
之后的花括号的@interface
文件中看到了这种方式:
@interface ViewController () {
NSString *test1;
}
我已经看到它以这种方式完成,在.m
之后的花括号的@implementation
文件中:
@implementation ViewController {
NSString *test2;
}
最佳做法是什么?有什么区别吗?如果是这样的话,它们会是什么样的,哪种方式比另一种更好?
所有帮助将不胜感激, 感谢。
答案 0 :(得分:3)
其中任何一个都可行,但目前的最佳做法是使用属性。如果您希望只能在班级内访问它:
@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,它是您的属性的名称前缀为下划线:
- (void)setTest1:(NSString *)test1
{
_test1 = [test1 copy];
}
注意:copy
是因为您可能会将test1
设置为NSMutableString
的实例,并且您可能不希望其内容从您的下方变异。如上所述,当您覆盖setter时,您必须自己强制执行此copy
语义。