zoukankan      html  css  js  c++  java
  • OC封装继承和实例化

    [Person new] 做了三件事:

        1)申请内存空间

        2)给实例初始化

        3)返回空间首地址

        

        实例变量保存在堆区

     ``指针(对象名)保存在栈区

        对象方法保存在代码区

        调用方法先找到p所指向的堆区的指针—isa然后再找到isa所指向的代码区的方法

        对象方法只能由对象来调用,类方法只能由类来调用,不能当做函数来调用

        函数属于整个文件,函数的声明可以在main内部,也可以在main函数外面,除了@interface @end之间

        函数:

      1)所以函数都是平行的

      2)函数不存在隶属关系

      3)使用时可以直接掉用

      4) 不可以访问对象中的成员变量

     @interface @end 不可以嵌套

     在声明时不可以对成员变量初始化

     成员变量和方法不可以用static修饰

    [Person new]做了三件事:

     1)申请内存空间

     2)给实例变量初始化

     3)返回空间首地址

     申请空间在内存的哪个区:

        new的时候申请的空间在空间的堆区

        如果实例变量是基本类型,此时初始化为0.

        如果是字符串类型,则初始化为null

     实例变量又保存在什么地方

        堆区

        p(指针变量名)栈区

     对象方法保存在代码区

     为什么[p run]; 就可以调用方法了?如何调用的

        首先找p对应的空间,然后找到_isa,再找到_isa所指向的代码空间,然后到该空间中找方法

    15)类方法:

    类方法调用不需要实例

     类方法的调用 [类名称 类方法名称]

     类方法名称和对象方法名称可以相同

     类方法的好处是不需要创建对象,直接通过类名进行访问,不需要在堆区创建任何空间

     类方法中不允许访问实例变量,可以传个参数

     实例方法可以访问实例变量

     对象方法可以调用对象的其它方法

     在类方法中可以调用类的其它方法,可以用self,也可以使用其它类名调用方法方法

     在类方法中也可以调用对象方法,只不过是通过参数把对象传过来或创建一个对象

     类方法不能调用自身(死循环)

    [[Car alloc] init] 等同于[Car new]

     匿名类作为方法参数使用:

     Person *p = [[Person alloc] init]

     [p gohome:[Car new]];

    16)封装:

    实例变量只能被当前类的对象方法访问

     set方法的书写规范:

     1)set方法一定是一个对象方法

     2)set方法一定不能有返回值

     3)set方法必须以set开头    

     4)set之后跟的是实例变量去掉下划线,并且首字母大写

     5)set方法一定有参数,而且参数类型和实例变量的类型一致

     6)oc中没有方法重载,oc中方法不能同名

     7)static 定义的变量只能在当前文件中使用

    17)self:

    self指调用当前方法的对象

      self在当前类方法中指代当前类

      Person *p = [Person new];

      [p class]; //返回当前类

      函数内部可以定义和全局变量同名的变量

      如果同名,局部变量会暂时屏蔽全局变量的作用域(可以用self来区分)

    18)继承:

    基类的私有属性能被继承,但不能使用

     oc中是单继承

     调用对象方法先查找本类中是否有方法,否则查找父类

     支持多层继承

     变量默认修饰符是@protect

     @private 只能在当前类的对象方法中使用

     .m中定义的变量就是私有变量

     没有在.h中声明的方法是私有方法

     私有方法不能被子类继承

     NSLog("%p", d); 打印对象地址

     NSLog("%@", d); 打印类名+对象地址

     以%@的格式打印对象d,此时调用对象的description方法,如果子类中没有重写description方法则调用父类的

     [d class]; 获取Dog类

     类方法不能访问实例变量

     不要在description方法中使用%@和self会造成死循环

  • 相关阅读:
    java 正则表达式
    jqGrid初次使用遇到的问题及解决方法
    JavaScript设计模式 -- 读书笔记
    CSS 7阶层叠水平
    高性能的JavaScript -- 读书笔记
    javaWeb学习笔记
    eclipse内存溢出报错:java.lang.OutOfMemoryError:Java heap space.
    解决eclipse插件svn不显示svn信息和显示的信息为数字的问题
    JDK环境变量配置
    Maven3.0.3的环境变量配置
  • 原文地址:https://www.cnblogs.com/coolcold/p/4674377.html
Copyright © 2011-2022 走看看