您的位置:首页 > 其它

OC基础--self关键字&super关键字

2016-01-28 15:19 281 查看
PS:OC中的self关键字可以与C#中的this关键字区分记忆,虽然区别还是很大的。  OC中的super关键字指的是父类指针

一、self关键字必须了解的知识:

1.使用场合:只能用在方法中(对象方法\类方法 都可以),不能用在函数中

2.每次调用方法的时候,系统会自动创建self指针

3.self指正指向的是方法调用者

---注意:在类方法中,self指针一定指向的是类。

    在对象方法中,self指针一定指向的是对象。这个是OC语言的一个陷阱

    当在类方法中是调用了对象方法,那么编译器会将调用的这个对象方法当做类方法来处理

    反之,当在对象方法中调用了类方法,那么编译器会将调用的这个类方法当做对象方法来处理

注意事项中的代码示例:

#import <Foundation/Foundation.h>

@interface TestClass : NSObject

/*
- (void) objMethod1;

+ (void) classMethod1;
*/

+ (void) test;

@end

@implementation TestClass

+ (void) test
{
NSLog(@"test-----------");
// 会引发死循环
[self test];
}

/*
下面的self使用都不正确
- (void) objMethod1
{
NSLog(@"调用了objMethod1方法----对象方法");
// 编译器会将classMethod1当做是对象方法处理
[self classMethod1];
}

+ (void) classMethod1
{
// 编译器会将objMethod1当做是类方法处理
[self objMethod1];
}
*/

@end

int main()
{
[TestClass test];

return 0;
}


4.self是一个特殊的指针,只在@implementation的方法中才有

5.self其实是方法中的一个内置指针,每次调用方法们都会有self这个指针

6.可以使用“self->成员变量名” 访问当前方法调用的成员变量

7.使用“ [self  方法名]; ”来调用方法(对象方法\类方法)

代码示例:

/*
self
1.使用场合:只能用在方法(对象方法\类方法),不能用在函数中
2.每次调用方法的时候,系统会自动创建self指针
3.self指针指向方法调用者
*/

#import <Foundation/Foundation.h>

@interface Car : NSObject
{
int _wheels;
}

- (void)setWheels:(int)wheels;
- (int)wheels;

- (void)run;

@end

@implementation Car

// 所有的成员变量(不管是不是@public),都能直接在对象方法中访问

- (void) setWheels:(int)wheels
{
_wheels = wheels;
//或者self->_wheels = wheels;
}

- (int) wheels
{
return self->_wheels;//或者return _wheels;
}

- (void) run
{
// self是一个特殊的指针,只在@implementation的方法中才有
// self其实是方法中一个内置指针,每次调用方法,都会有self这个指针
// self指针指向方法调用者
int _wheels = 10;

// 利用self指针访问方法调用的成员变量_wheels
NSLog(@"%i个轮子的车子飞奔起来了!", self->_wheels);
}

/*
错误写法:self不能用在函数中
void test()
{
self->_wheels = 10;
}
*/

@end

int main()
{
Car *c = [Car new];
[c setWheels:4];

[c run];

return 0;
}


/*
self
1.出现的地方:所有的OC方法中(对象方法\类方法),不能出现在函数
2.作用
1> 使用 "self->成员变量名" 访问当前方法调用的成员变量
2> 使用 "[self 方法名];" 来调用方法(对象方法\类方法)
*/

#import <Foundation/Foundation.h>

@interface Calculator : NSObject

+ (double)sumOfNum1:(double)num1 andNum2:(double)num2;
+ (double)averageOfNum1:(double)num1 andNum2:(double)num2;

@end

@implementation Calculator

+ (double)sumOfNum1:(double)num1 andNum2:(double)num2
{
return num1 + num2;
}

+ (double)averageOfNum1:(double)num1 andNum2:(double)num2
{
// self 指向 方法调用者
// 在类方法中,self一定指向类
double sum = [self sumOfNum1:num1 andNum2:num2];

return sum / 2;
}

@end

int main()
{
double d = [Calculator averageOfNum1:10 andNum2:5];

NSLog(@"d is %f", d);
return 0;
}


二、super关键字

1.super可以用来调用父类的方法

2.如果super用在对象方法中,那么就是调用父类的对象方法

如果super用在类方法中,那么就是调用父类的类方法

                  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: