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. socket通信入门

    以一个基本的python程序为例解释 源代码如下: #!/usr/bin/env python  #指出代码用什么程序去运行它.首先会到env设置里查找python的安装路径,再调用对应路径下的解释器 ...

  2. 如何实现ZBrush 4R7中按钮颜色的自定义

          本文详细讲解在ZBrush® 4R7中如何改变按钮颜色. Zbrush默认的开关按钮颜色为橙黄色,若您不喜欢当前颜色,可以通过“Icolors”功能按钮下的各命令来更改界面开关颜色及透明度 ...

  3. excel相关

    1.excel怎样筛选重复数据 打开Excel文件,选中待处理的数据区域,然后分别点击菜单开始--条件格式--突出显示单元格规则--重复值. 确认以Excel默认的格式突出显示重复值.之后,重复的数据 ...

  4. Jenkins学习七:Jenkins的授权和访问控制

    默认的Jenkins不包含任何的安全检查,任何人可以修改Jenkins设置,job和启动build等.显然地在大规模的公司需要多个部门一起协调工作的时候,没有任何安全检查会带来很多的问题. 在系统管理 ...

  5. Javascript中的对象和原型(3)

    在Javascript中的对象和原型(二)中我们提到,用构造函数创建的对象里面,每个对象之间都是独立的,这样就会降低系统资源的利用率,解决这样问题,我们就要用到下面提到的原型对象. 一 原型对象 原型 ...

  6. vmware12安装vmtools

    一. 1. 机器要开启支持BIOS的选项. 二. 1. 点击vmware 应用 vmware install 2. 虚拟机: tar  xvf vmtools-distb.tgr.gz 3. 虚拟机: ...

  7. IDEA 滚动条跳动问题

    关掉有道词典的 “屏幕取词” 和 “划词翻译”

  8. 纯CSS3制作九款可爱复古相机

    前言 掐指一算,快两个月没写博客分享了.好吧,我就只是在准备校招而已.现在已经有满意的offer了,所以我就回来啦!这两个月过得挺煎熬也挺充实的.具体细说估计得长篇大论,我就不闲扯了.总之呢,越努力, ...

  9. poj1012

    Joseph Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 52097   Accepted: 19838 Descript ...

  10. 09Mybatis_入门程序——删除用户以及更新用户

    删除用户: 还是前面的的案例,别的都不改,就修改两处地方.1.user.xml文件以及2.Mybatis_first.java文件 user.xml文件代码修改如下: <?xml version ...