在object-c语言中,类的变量属性实际上是有作用域范围的,那么我们oc语言有哪些变量作用域呢,总共有3个作用域,如下。
OC变量作用域名称 | 作用范围 |
@public | 全局都可以访问 |
@protected | 只能在类内部或者子类中访问 |
@private | 只能在类的内部访问 |
在默认情况下类的属性的作用域是@protected,我们前面的Student类就有两个属性:int age和int no,也就是说在别的类中想给这些属性变量赋值的话,需要继承这个Student学生类。例如我又创建了一个GoodStudent的类,我需要写一个方法,给age年龄赋值,代码如下。
1.GoodStudent.h申明类代码。
#import "Student.h" //继承Student类 @interface GoodStudent : Student //没有在这儿申明的方法就是private方法 //-(void)test; @end
2.GoodStudent.m实现类的代码。
#import "GoodStudent.h" @implementation GoodStudent //外部类方法使用了Student类中的属性age -(void)test{ //这里的self指的是 self.age = 20; NSLog(@"年龄是:%d",age); } //静态方法使用self +(void)test2{ [GoodStudent alloc]; [self alloc]; //以上的代码是等效的,写一个就好 } @end
说明:以上是一个外部类GoodStudent调用内部类Student.h中申明的属性所需要继承的,还有一点就是,凡是没有在.h中申明的方法,就叫private方法,例如上面的test方法,我并没有在GoodStudent.h中申明它,而是直接在GoodStudent.m中写了test这个方法,所以这种方法只能在本类中使用。
self关键字代表的自己本身,在类方法中("-"冒号表示)使用代表的是本类对象,在静态方法中("+"冒号表示)使用代表的是当前类的类名。静态方法只能调用静态方法或者静态属性。