一、self
self通常指你定义的类本身,比如:你在自定义类Test.m文件中定义了一个方法
-(void)print{……},并且你想在一个初始化方法init中调用这个方法,你就可以在init方法里写
[self print],这里的self就是类自身。
二、super
super通常指代父类,通常在一些初始化的时候先调用父类的初始化方法并将返回值传递给自身self
你可能会看到这样的代码,在一个类的实现文件的初始化方法init中写:self = [[super alloc] init];
就是上面那种情况,还有就是当你继承一个父类并重写这个方法,但是之后又想调用父类相同方法 就可以使用[super 方法名]。
三、static
在函数体内定义静态变量,在调用该函数的时候会保留该值,并且只会初始化一次,初始值默认为0。
看下面例子:
定义一个Test类,并且定义一个print方法,在print方法中定义局部静态常量:
Test.h :
#import <Foundation/Foundation.h>
@interface Test : NSObject
- (void)print;
@end
Test.m :
#import "Test.h"
@implementation Test
- (void)print
{
static int i = 0;
NSLog(@"i = %i",i);
i++;
}
@end
mian.m :
#import <Foundation/Foundation.h>
#import "Test.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
Test *test1 = [[Test alloc] init];
[test1 print];//输出 i = 0;
Test *test2 = [[Test alloc] init];
[test2 print];//输出 i = 1;
}
return 0;
}
这样可以计算Test类的print函数被总共调用了几次,然而其他的局部变量是做不到的。
这个只是static的简单用法,关于static更详细的介绍,请看这个这篇博客, 写的很详细。