OC基础--self关键字&super关键字
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关键字的更多相关文章
- java基础学习总结——super关键字
一.super关键字
- JAVA笔记5__构造块、静态块/单例设计模式/继承/final关键字/super关键字
public class Main { { //构造块(在构造对象时调用,先于构造方法执行) System.out.println("我是构造块!"); } static{ //静 ...
- java基础篇 之 super关键字的理解
之前一直认为,super指向的是父类对象.到今天,仔细查询了资料,自己做了实验,确认这个结论是不对的.我们分一下几个点讨论下: super的作用: 第一种:用来访问父类被隐藏的成员变量 第二种:用 ...
- abstract关键字 super 关键字 类与继承
https://www.cnblogs.com/liubing2018/p/8421319.html https://www.cnblogs.com/dolphin0520/p/3803432.htm ...
- 面向对象编程(十)——继承之Super关键字及内存分析
Super关键字
- this、super关键字
this关键字 this 关键字用来表示当前对象本身,或当前类的一个实例,通过 this 可以调用本对象的所有方法和属性. public class Demo{ public int x = 10; ...
- JavaSE复习日记 : 继承关系和super关键字以及继承关系中方法的覆写
/* * 类的继承和super关键字 * * 软件开发的三大目的: * 可拓展性; * 可维护性; * 可重用性; * * 这里单说下可重用性这一项: * 为了代码复用,复用方式有: * 函数的调用复 ...
- Java面向对象----继承概念,super关键字
继承概念: 继承需要符合的关系 is-a , 父类通用更抽象,子类更特殊更具体 类之间的关系 继承体现 组合体现 实现接口体现 继承的意义 代码重用 体现不同抽象层次 extends关键字 Sup ...
- OC基础笔记目录
OC基础(1) Objective-C简介 OC和C对比 第一个OC程序 面向对象思想 OC基础(2) 类与对象 类的设计 第一个OC类 对象方法的声明和实现 类方法的声明和实现 OC基础(3) 对象 ...
随机推荐
- USACO section1.2 Miking cows
/* ID: vincent63 LANG: C TASK: milk2 */ #include <stdio.h> #include<stdlib.h> #include&l ...
- #include <NOIP2009 Junior> 细胞分裂 ——using namespace wxl;
题目描述 Hanks 博士是 BT (Bio-Tech,生物技术) 领域的知名专家.现在,他正在为一个细胞实 验做准备工作:培养细胞样本. Hanks 博士手里现在有 N 种细胞,编号从 1~N,一个 ...
- 二分+动态规划 POJ 1973 Software Company
Software Company Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 1112 Accepted: 482 D ...
- uGUI练习(一) Anchor
一.练习步骤 如果用过NGUI的Anchor,我们知道在2.x的版本有UIAnchor组件(下图左),3.x版本中,每个UIWidget有自带的Anchors(下图右) 而uGUI的Anchor用起来 ...
- JMeter学习(十八)JMeter测试Java(二)
实例: 服务为:将输入的两个参数通过IO存入文件: 1.打开MyEclipse,编写Java代码 服务: package test; import java.io.File; import java. ...
- Android Activity的生命周期
一.为什么要了解Activity的生命周期 activity is directly affected by its association withother activities, its tas ...
- 查询各个商品分类中各有多少商品的SQL语句
SELECT goods_category_id ,count(*) FROM `sw_goods` group by goods_category_id
- 使用EasyUI要引入哪些文件
使用EasyUI,一般需要导入如下文件 <link rel="stylesheet" type="text/css" href="../reso ...
- codevs 1133 表达式的值
1133 表达式的值 2011年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Descript ...
- [tools]google神器浏览器下载
google神器下载 这是一款优化了的google浏览器 http://www.ccav1.me/chromegae.html