iOS实例变量



简单的问题,我只想听听其他人做什么,最好的做法是什么。

在我的一个视图控制器中声明实例变量时。申报的合适地点在哪里?我希望实例变量可用于视图控制器中的所有方法/函数

我看到它是这样做的,在@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语义。

最新更新