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. bzoj-2338 2338: [HNOI2011]数矩形(计算几何)

    题目链接: 2338: [HNOI2011]数矩形 Time Limit: 20 Sec  Memory Limit: 128 MB Description Input   Output 题意: 思路 ...

  2. HDU 1892 See you~

    最裸的二维树状数组,但是因为内存太大(c[1010][1010]),好像不能运行,结果蒙着写,写了好久.. 代码: #include <iostream> #include <cst ...

  3. Java虚拟机详解05----垃圾收集器及GC参数

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  4. 第8课 goto 和 void 分析

    1. 遭人遗弃的goto (1)高手潜规则:禁用goto (2)项目经验:程序质量与goto出现的次数成反比 (3)最后的判决:将goto打入冷宫(1)循环语句的基本工作方式 [实例分析]goto副作 ...

  5. Android Parcelable和Serializable的区别,androidparcelable

    本文主要介绍Parcelable和Serializable的作用.效率.区别及选择,关于Serializable的介绍见Java 序列化的高级认识. 1.作用 Serializable的作用是为了保存 ...

  6. 时间与NSString转换

    //传进来时间字符串转换 + (NSString *) getChatTimeString:(NSString *)timeString { if (timeString==nil || timeSt ...

  7. PHP中的魔术变量

    PHP中的常量大部分都是不变的,但是有8个常量会随着他们所在代码位置的变化而变化,这8个常量被称为魔术常量. 名称 说明 __LINE__ 文件中的当前行号. __FILE__ 文件的完整路径和文件名 ...

  8. action中result没有值

    action中result没有值,访问action会输出action中的所有数据,输出类型为.action类型 .

  9. Spring中使用Quartz

    package com.ncs.hj; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; ...

  10. Linux 网络编程二(Socket创建)

    TCP通信 一个程序使用套接字需要执行4个步骤. --分配套接口和初始化 --连接 --发送或接收数据 --关闭套接字 涉及到的调用包括socket.bind.listen.connect(阻塞线程) ...