属性作用域
【访问控制符】
@protected, 在此类、子类中访问。
@private,只在本类中访问。
@public,在所有类中都可以访问。
如下图所示:
#import <Foundation/Foundation.h>
extern NSString *nstr;
@interface Person : NSObject{
//实例变量作用域
@protected NSString *_name; //@protected,在整个类中、子类均可以访问,实例变量的默认情况
@private int _sex; //@private, 在当前类中访问
@public int _age; //@public, 所有类都可以访问
}
@end
测试访问效果:
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World!");
Person *person = [[Person alloc] init];
//person->_name; //@protected无法访问
//person->_sex; //@private无法访问
person->_age; //@public可以访问
}
return 0;
}
【外部变量】
外部变量,可以被所有类访问。在.h文件中使用“extern”访问。如下图所示:
#import "Person.h"
NSString *nstr = @"天气不好"; //外部变量,可以被任何类访问
@implementation Person
@end
#import <Foundation/Foundation.h>
extern NSString *nstr;
@interface Person : NSObject{
//实例变量作用域
@protected NSString *_name; //@protected,在整个类中、子类均可以访问,实例变量的默认情况
@private int _sex; //@private, 在当前类中访问
@public int _age; //@public, 所有类都可以访问
}
@end
下面对外部变量进行访问并赋值,如下图所示:
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World!");
nstr = @"天气真好";
NSLog(@"%@",nstr);
}
return 0;
}
【static、const】
static, 只对第一次赋值有效,并且随类的生成而生成,当类销毁后依然保留值。
const,一次性赋值,不可改变。
如下图所示:
int geti(){
static int i = 0;
i++;
return i;
}
int getit(){
const int a = 0;
// a++;
return a;
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World!");
Person *person = [[Person alloc] init];
//person->_name; //@protected无法访问
//person->_sex; //@private无法访问
person->_age; //@public可以访问
nstr = @"天气真好";
NSLog(@"%@",nstr);
geti();
geti();
geti();
NSLog(@"%i",geti());
NSLog(@"%i",getit());
}
return 0;
}