我只是试图通过丢弃代码来理解变量的生命。我可以看到_inside和_outside在实例化新实例时保留,而大括号则不然。
@interface ViewController (){
NSString *_innBraces;
}
@end
NSString *_outside;
@implementation ViewController{
NSString *_inmBraces;
}
NSString *_inside;
-(id)initWithInside:(NSString*)inside outside:(NSString*)outside nBraces:(NSString*)nBraces mBraces:(NSString*)mBraces{
self = [super init];
if (self) {
_inside = inside;
_outside = outside;
_innBraces = nBraces;
_inmBraces = mBraces;
return self;
}else{
return nil;
}
}
答案 0 :(得分:5)
_inside
和_outside
都被声明为全局变量。_innBraces
和_inmBraces
之间没有区别,它们都是类中的实例变量。如果@interface
位于标头文件中,那么您会看到两者之间的范围不同,因为_inmBraces
只会在您的实施文件中显示,并且_innBraces
将是在包含.h
文件的任何文件中都可见。static
关键字之前),那么它们将在存储和命名空间中都是本地的,并且声明它们的文件。在1和3的情况下,它们都是直接C声明,因此它们是否在@implementation
和@interface
的范围内并没有任何区别。在Objective-C中,没有类变量。
对于类变量,一般过程是创建以下形式的文件静态变量:
static NSString *sMyClassVariable;
在实现文件中。此变量因为是静态的,在您的实现文件之外的任何其他文件中都不可见。