self指针:

  1. self是oc面向对象设计中的一个特殊指针,相当于java中的this,但是比this强大,this只能访问实例对象的相关方法和成员变量,或者说this只代表实例对象;
  2. self不仅可以代表实例对象,还可以代表类对象;谁调用当前方法,self就代表谁;如果self用在了以"-"号的方法中,也就是对象方法中,那么就代表实例对象,若果在"+"号开头的方法中,self就代表类对象,因为只有类对象才能调用以"+"号开头的方法;
  3. self调用成员变量:self->age; 调用方法:[self test]; // age是成员变量,test是方法;
  4. 但是self如果调用的不得当,会引起死循环:
    - (void) test
    {
    NSLog(@"hahha");
    [self test]; // 首先这个self肯定是实例对象,这样调用会引发死循环;
    }

super指针:

  1. 和self差不多,只不过它是调用的当前类的父类的方法,不管是类方法还是对象方法;
  2. 如果super处在当前类的类方法中,就会调用父类的类方法; 如果super处在当前类的对象方法中,就会调用父类的对象方法;
  3. 使用场景:子类如果想覆盖父类的某个方法,且只是对父类方法的延伸,在父类的基础上增加功能,那么在重写的方法中就先用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指针的更多相关文章

  1. 关于oc运行时 isa指针详解

    Cocoa框架是iOS应用程序的基础,了解Cocoa框架,对开发iOS应用有很大的帮助. 1.Cocoa是什么? Cocoa是OS X和 iOS操作系统的程序的运行环境. 是什么因素使一个程序成为Co ...

  2. OC self = [super init] , 点语法 , @property

    OC self = [super init] , 点语法 , @property 构造方法为啥这么写? self = [super init]; [super init] 的结果可能有三种: 第一种: ...

  3. runtime运行时,类、对象、isa指针

    先查看一段OC源码,关于类的定义: /// An opaque type that represents an Objective-C class. typedef struct objc_class ...

  4. 位域-isa指针

    一.isa指针结构 union isa_t { isa_t() { } isa_t(uintptr_t value) : bits(value) { } Class cls; uintptr_t bi ...

  5. isa指针

    转载自 http://www.cnblogs.com/zhangdashao/p/4438540.html 可以去这里看详细的. 每个Objective-C对象都有一个隐藏的数据结构,这个数据结构是O ...

  6. [BS-21] 关于OC中对象与指针的思考

    关于OC中对象与指针的思考 1. 创建对象: OC中可通过代码Person *p = [[Person alloc] init];创建了一个对象p.该过程中内存情况为: 在当前线程的栈(默认1M)中, ...

  7. iOS isa指针

    在Objective-C中,任何类的定义都是对象.类和类的实例没有任何本质上的区别.任何对象都有isa指针. isa:是一个Class 类型的指针. 每个实例对象有个isa的指针,它指向对象的类,而C ...

  8. Runtime之IMP指针,isa指针

    要了解 isa 指针先了解下类的定义在xcode中用快捷键Shift+Cmd+O 搜索objc.h 能看到类的定义:了解 Paste_Image.png 可以看出:objc_object:Object ...

  9. OC 实例变量(instance var)与属性(@property)的关系 isa指针

    实例变量(instance var)与属性(@property)的关系 Objective-C 2.0之后,声明一个@property name自动产生一个实例变量,名为_name,因此省去实例变量和 ...

随机推荐

  1. ASP.Net 验证控件 RegularExpressionValidator

    定义和用法 RegularExpressionValidator 控件用于验证输入值是否匹配指定的模式. 注释:除非浏览器不支持客户端验证或 EnableClientScript 属性被设置为 fal ...

  2. JS 异常: Uncaught RangeError: Maximum call stack size exceeded

    遇到了这个js异常, 总是吧浏览器搞崩溃,这是什么原因呢? 开始我也只能想到死循环, 也许是哪个条件判断写错了,其实不是.经过google,发现了一篇文章,内容请看: ================ ...

  3. 一场ACM一场梦——我的一年

    听着裁判倒计时比赛结束,看着全场鲜艳的气球,今天的结果是the last result i can image. 过几天给校赛出题,去年此时的我,还从来没有过竞赛的经验,只因为在大学开学前看了一点点c ...

  4. 关于C# webform 项目发布 aspx页面无任何代码 每个页面都以dll形式发布

    关于C# webform 项目发布 注意:aspx页面无任何代码,每个页面都以dll形式发布带bin文件夹里 具体操作方法如下图:

  5. Ajax 技术二

    一.Ajax与XML案例 例:使用Ajax+XML读取数据表中的分类信息并放入下拉选框中 demo01.php 运行结果: 二.Ajax中的JSON 在Javascript中,可以通过两种方式(XML ...

  6. 标签控制器,UITabBarController

    注意: 1.tabbar高度不可设置,可通过_tabbar.tabbar.frame设置tabbar的位置 2.tabbar不同页面添加同一个视图后其那面添加的不起作用,只有最后一个才具有所添加的仕途 ...

  7. 最初程序员的思维“修炼”之四——Android平台开发的“强制关闭”解决思路

    我和我的朋友参加一个比赛——物联网应用技能大赛,这个大赛所要求的技能有,硬件技术,Android平台开发技术,.NET平台开发技术,所以这是一个团队合作的比赛,基本上没有人能同时掌握这三种技术(在校生 ...

  8. FastDFS4 + Ubuntu12安装及部署

    1. 安装libevent 如果需要使用http进行下载,需要安装这个组件. 2. 安装fastdfs 3. 配置fastdfs 4. 安装nginx 问题4.1:安装nginx启动后访问原先资源UR ...

  9. js 数组去重复键

    Array.prototype.deleteEle = function() { var newArr = this; for (var i = newArr.length - 1; i >= ...

  10. sql拆分查询

    有这样一个需求: 临时表sql: create table #AA ( ID int, Name nvarchar(20) ) insert #AA select 1,'苏州/上海/温州' union ...