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 ;
}

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 = ; // 利用self指针访问方法调用的成员变量_wheels
NSLog(@"%i个轮子的车子飞奔起来了!", self->_wheels);
} /*
错误写法:self不能用在函数中
void test()
{
self->_wheels = 10;
}
*/ @end int main()
{
Car *c = [Car new];
[c setWheels:]; [c run]; return ;
}
 /*
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 / ;
} @end int main()
{
double d = [Calculator averageOfNum1: andNum2:]; NSLog(@"d is %f", d);
return ;
}

二、super关键字

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

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

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

                  

OC基础--self关键字&super关键字的更多相关文章

  1. java基础学习总结——super关键字

    一.super关键字

  2. JAVA笔记5__构造块、静态块/单例设计模式/继承/final关键字/super关键字

    public class Main { { //构造块(在构造对象时调用,先于构造方法执行) System.out.println("我是构造块!"); } static{ //静 ...

  3. java基础篇 之 super关键字的理解

    ​ 之前一直认为,super指向的是父类对象.到今天,仔细查询了资料,自己做了实验,确认这个结论是不对的.我们分一下几个点讨论下: super的作用: 第一种:用来访问父类被隐藏的成员变量 第二种:用 ...

  4. abstract关键字 super 关键字 类与继承

    https://www.cnblogs.com/liubing2018/p/8421319.html https://www.cnblogs.com/dolphin0520/p/3803432.htm ...

  5. 面向对象编程(十)——继承之Super关键字及内存分析

    Super关键字

  6. this、super关键字

    this关键字 this 关键字用来表示当前对象本身,或当前类的一个实例,通过 this 可以调用本对象的所有方法和属性. public class Demo{ public int x = 10; ...

  7. JavaSE复习日记 : 继承关系和super关键字以及继承关系中方法的覆写

    /* * 类的继承和super关键字 * * 软件开发的三大目的: * 可拓展性; * 可维护性; * 可重用性; * * 这里单说下可重用性这一项: * 为了代码复用,复用方式有: * 函数的调用复 ...

  8. Java面向对象----继承概念,super关键字

    继承概念: 继承需要符合的关系  is-a  , 父类通用更抽象,子类更特殊更具体 类之间的关系 继承体现 组合体现 实现接口体现 继承的意义 代码重用 体现不同抽象层次 extends关键字 Sup ...

  9. OC基础笔记目录

    OC基础(1) Objective-C简介 OC和C对比 第一个OC程序 面向对象思想 OC基础(2) 类与对象 类的设计 第一个OC类 对象方法的声明和实现 类方法的声明和实现 OC基础(3) 对象 ...

随机推荐

  1. 【读书笔记《Android游戏编程之从零开始》】12.游戏开发基础(Canvas 画布)

    1.Canvas 画布 画布类 Canvas 封装了图形和图片绘制等内容,此类常用的函数说明如下: drawColor(int color) 作用:绘制颜色覆盖画布,常用于刷屏 参数:颜色值,也可用十 ...

  2. [转载]ExtJs4 笔记(8) Ext.slider 滚轴控件、 Ext.ProgressBar 进度条控件、 Ext.Editor 编辑控件

    作者:李盼(Lipan)出处:[Lipan] (http://www.cnblogs.com/lipan/)版权声明:本文的版权归作者与博客园共有.转载时须注明本文的详细链接,否则作者将保留追究其法律 ...

  3. HDU 4455 Substrings --递推+树状数组优化

    题意: 给一串数字,给q个查询,每次查询长度为w的所有子串中不同的数字个数之和为多少. 解法:先预处理出D[i]为: 每个值的左边和它相等的值的位置和它的位置的距离,如果左边没有与他相同的,设为n+8 ...

  4. 2014 Super Training #7 C Diablo III --背包问题(DP)

    原题: ZOJ 3769 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3769 一个带有一些限制的背包问题. 假设在没有限 ...

  5. 关于tcpdump抓包一个很详细的介绍

    http://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html

  6. EventBus (三) 源码解析 带你深入理解EventBus

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/40920453,本文出自:[张鸿洋的博客] 上一篇带大家初步了解了EventBus ...

  7. angularjs: ng-select和ng-options

    angular.js有一个很强大的指令: ng-select 它可以帮助你通过数据模型来创建select元素.它很好的支持了select标签的语法,但是却有点坑. 假设有如下一段json数据: { & ...

  8. mysql及php命名规范

    一.mysql命名规范 1.设计原则 1) 标准化和规范化数据的标准化有助于消除数据库中的数据冗余.标准化有好几种形式,但 Third Normal Form(3NF)通常被认为在性能.扩展性和数据完 ...

  9. Open Sans字体兼容问题解决办法[font-face]

    参考:http://www.tantengvip.com/2014/11/open-sans/ 1.font-face使用方法 font-face是CSS3中的一个模块,主要是把自定义的Web字体嵌入 ...

  10. SQL 常见函数使用

    1.字符串转化为整型 CONVERT(INT,'字符串') 2.结果集 输出为一段字符串 SELECT STUFF((SELECT ','+A FROM tableFOR XML PATH('')), ...