OC self super isa指针
self指针:
- self是oc面向对象设计中的一个特殊指针,相当于java中的this,但是比this强大,this只能访问实例对象的相关方法和成员变量,或者说this只代表实例对象;
- self不仅可以代表实例对象,还可以代表类对象;谁调用当前方法,self就代表谁;如果self用在了以"-"号的方法中,也就是对象方法中,那么就代表实例对象,若果在"+"号开头的方法中,self就代表类对象,因为只有类对象才能调用以"+"号开头的方法;
- self调用成员变量:self->age; 调用方法:[self test]; // age是成员变量,test是方法;
- 但是self如果调用的不得当,会引起死循环:
- (void) test
{
NSLog(@"hahha");
[self test]; // 首先这个self肯定是实例对象,这样调用会引发死循环;
}
super指针:
- 和self差不多,只不过它是调用的当前类的父类的方法,不管是类方法还是对象方法;
- 如果super处在当前类的类方法中,就会调用父类的类方法; 如果super处在当前类的对象方法中,就会调用父类的对象方法;
- 使用场景:子类如果想覆盖父类的某个方法,且只是对父类方法的延伸,在父类的基础上增加功能,那么在重写的方法中就先用super调用父类的方法;
#import <Foundation/Foundation.h>
// 父类Person类
@interface Person : NSObject // 为了方便说明问题,定义两个同名方法,一个是类方法,一个是对象方法,walk方法是要被子类覆盖的;
- (void)test;
+ (void)test; - (void)walk;
@end @implementation Person
- (void)test
{
NSLog(@"对象方法-test");
} + (void)test
{
NSLog(@"类方法-test");
} - (void)walk
{
NSLog(@"walk");
}
@end // 子类 Boy
@interface Boy : Person - (void)haha;
+ (void)haha1; - (void)walk;
@end
@implementation Boy
- (void)haha
{
[super test]; // 在对象方法中调用super,调用的时父类的对象方法test
} + (void)haha1
{
[super test]; // 在类方法中调用super,调用的时父类的类方法test } - (void)walk
{
[super walk]; // 掉用父类的walk方法
NSLog(@"run");
}
@end int main()
{
Boy *b = [Boy new];
[b haha]; // 在对象方法中调用super,调用的时父类的对象方法test,输出 -test [Boy test]; // 在对象方法中调用super,调用的时父类的对象方法test,输出 +test return ;
}
isa指针是每个对象内部自动生成,指向类对象的指针;
OC self super isa指针的更多相关文章
- 关于oc运行时 isa指针详解
Cocoa框架是iOS应用程序的基础,了解Cocoa框架,对开发iOS应用有很大的帮助. 1.Cocoa是什么? Cocoa是OS X和 iOS操作系统的程序的运行环境. 是什么因素使一个程序成为Co ...
- OC self = [super init] , 点语法 , @property
OC self = [super init] , 点语法 , @property 构造方法为啥这么写? self = [super init]; [super init] 的结果可能有三种: 第一种: ...
- runtime运行时,类、对象、isa指针
先查看一段OC源码,关于类的定义: /// An opaque type that represents an Objective-C class. typedef struct objc_class ...
- 位域-isa指针
一.isa指针结构 union isa_t { isa_t() { } isa_t(uintptr_t value) : bits(value) { } Class cls; uintptr_t bi ...
- isa指针
转载自 http://www.cnblogs.com/zhangdashao/p/4438540.html 可以去这里看详细的. 每个Objective-C对象都有一个隐藏的数据结构,这个数据结构是O ...
- [BS-21] 关于OC中对象与指针的思考
关于OC中对象与指针的思考 1. 创建对象: OC中可通过代码Person *p = [[Person alloc] init];创建了一个对象p.该过程中内存情况为: 在当前线程的栈(默认1M)中, ...
- iOS isa指针
在Objective-C中,任何类的定义都是对象.类和类的实例没有任何本质上的区别.任何对象都有isa指针. isa:是一个Class 类型的指针. 每个实例对象有个isa的指针,它指向对象的类,而C ...
- Runtime之IMP指针,isa指针
要了解 isa 指针先了解下类的定义在xcode中用快捷键Shift+Cmd+O 搜索objc.h 能看到类的定义:了解 Paste_Image.png 可以看出:objc_object:Object ...
- OC 实例变量(instance var)与属性(@property)的关系 isa指针
实例变量(instance var)与属性(@property)的关系 Objective-C 2.0之后,声明一个@property name自动产生一个实例变量,名为_name,因此省去实例变量和 ...
随机推荐
- C# 线程抛异常
异常抛出 异常抛出要在线程代码中抛出,否则捕获不到 using System; using System.Threading; namespace testthread_keyword_lock { ...
- sql server存储过程相关
1,创建存储过程 create proc proc_test with encryption[这里是对存储过程加密],如果存储过程不常用可以加with recompile[这样存储过程就不会放到缓存里 ...
- shell语法基础
一.变量 1.linux大小写敏感,变量取名要注意大小写.可以通过变量名前面加$来访问变量的内容.可以通过使用read命令来将用户输入的值赋给一个变量. 2.给变量赋值时,如果字符串中包含空格,就必须 ...
- 使用jquery插件报错:TypeError:$.browser is undefined的解决方法
关于$.browser browser就是用来获取浏览器基本信息的. jQuery 从 1.9 版开始,移除了 $.browser 和 $.browser.version , 取而代之的是 $.sup ...
- 网站seo新手快速提升自己的技巧
第一.找自身的问题 大多数从业者都有下面两个严重的问题: 1.过于放大SEO的重要性每个人,都有自大的习惯,地位越NB往往越把自己认知的一切当做真理,其实有可能那只是井口那巴掌大的一片天.在网络营销中 ...
- 复习IOS多线程知识
线程的注意点 1.不要同时开太多的线程(1~3条线程即可,不要超过5条) 2.线程概念 * 主线程 : UI线程,显示.刷新UI界面,处理UI控件的事件 * 子线程 : 后台线程,异步线程 3.不要把 ...
- jQuery骨架
jQuery选择器 jQuery操作DOM jQuery中的事件与应用 jQuery的动画与特效 Ajax在jQuery中的应用 jQuery常用插件 jQuery UI插件 jQuery实用工具函数 ...
- Angular2中的metadata(元数据)
@Attrubute() 从host element 中获得普通(不是@Input)属性对应的值 适用于组件嵌套或指令, 从父组件向子组件传递数据 app.component.ts import {C ...
- 6款基于SVG的HTML5应用和动画
1.HTML5 SVG 3D蝴蝶飞舞动画 逼真超酷 这次我们要分享的这款HTML5动画简直就是逆天,利用SVG制作的3D蝴蝶飞舞动画,蝴蝶飞舞动画非常逼真,蝴蝶飞舞的路线是利用SVG构造的.另外,动画 ...
- 【转】Javascript 中的false,零值,null,undefined和空字符串对象
js 开发中经常会碰到判断是否为空的情况,关于 null 和 undefined 的区别了解的不是很好,刚好看见这篇文章,转过来学习一下,以下是转载正文: 在Javascript中,我们经常会接触到题 ...