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语言的一个陷阱
当在类方法中是调用了对象方法,那么编译器会将调用的这个对象方法当做类方法来处理
反之,当在对象方法中调用了类方法,那么编译器会将调用的这个类方法当做对象方法来处理
注意事项中的代码示例:
4.self是一个特殊的指针,只在@implementation的方法中才有
5.self其实是方法中的一个内置指针,每次调用方法们都会有self这个指针
6.可以使用“self->成员变量名” 访问当前方法调用的成员变量
7.使用“ [self 方法名]; ”来调用方法(对象方法\类方法)
代码示例:
二、super关键字
1.super可以用来调用父类的方法
2.如果super用在对象方法中,那么就是调用父类的对象方法
如果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用在类方法中,那么就是调用父类的类方法
相关文章推荐
- 广告点击率 CTR预估中GBDT与LR融合方案
- select转移工具箱
- 并查集
- 创建或删除文件夹
- Android之网络编程(四)解析 JSON 格式数据
- 用DrawText实现高效的Android倒计时功能。
- 数据结构基础(8) --单链表的设计与实现(1)之基本操作
- SQL字符串函数
- Lua 在C程序中进行Lua表操作
- 说说分布式事务
- SVG
- 静态化 - 伪静态技术(PHP正则表达式实现)
- UVA 12333
- Black Hat python-1.x
- 解决ANT无法捕获异常的问题
- fiddler+jmeter联合使用
- Android 仿美女撕衣服效果
- 简单的动态广播收发
- 数据结构基础(7) --循环队列的设计与实现
- sp_executesql介绍和使用