美文网首页
objective-c 类

objective-c 类

作者: 一世长安乱 | 来源:发表于2018-04-10 16:33 被阅读0次

    类的声明

    @interface开头

    @end 结尾

    类名的首字母必须 大写
    声明类的目的就是为了告诉系统,类的属性和行为
    oc类声明属性只能写在 { }
    注意编写oc类属性时,将所有属性的名称前面加_
    类名后面的NSObject为了让类具备创建对象的能力

    @interface ClassName : NSObject
    {
        code;
    }
    @end
    

    类的实现

    @implementation开头

    @end结束

    然后在class对应的地方写上声明时声明的类的名称

    @implementation
    
        code
    
    @end
    
    私有成员
    在@implementation声明的成员变量,默认为私有的成员变量,并且和利用@private修饰的不一样,在@implementation中定义的成员变量在其他类中无法查看,也无法访问
    在@implementation中定义的私有变量只有在本类中访问
    
    私有方法
    如果只有方法的实现没有方法的声明,那么该方法就是私有方法
    在OC中没有真正的私有方法,因为OC是消息机制
    

    OC中定义一个方法分为两个
    • 声明:写在 @interface
      OC中的方法,如果没有形参,不需要写 () ,而是直接写函数名字
      OC中的 () 有特殊类型,OC方法中的 () 是用来括主数据类型的
      例如:
    (void)about;
    
    C语言中的函数也分为两种:内部函数和外部函数
    OC中也为分为两种:类方法和对象方法
    类方法只能用类名调用
    对象方法只能用对象调用,也就是指针
    - 类方法用 “ + ” 表示
    - 对象方法用 “ - ” 表示
    
    //类方法
    + (void)fun1;
    //对象方法
    - (void)fun2
    
    OC中的方法如果有参数,那么每个参数的数据类型前面必须加一个 “ : ”
    
    注意:当前这个函数的方法,它的名字是 fun: 和fun:: ,是两个不同的函数
    - (int)fun:(int)number;
    - (int)fun:(int)number:(char *)content;
    
    为了提高我们的阅读性,OC方法允许我们给每个参数添加标签,来说明当前函数的含义
    - (void)sendMessageWithNumber:(int)number andContent:(char *)content;
    
    此时方法的名字就是 sendMessageWithNumber:andContent
    如果不想每次使用方法都需要创建对象开辟存储空间,并且方法中没有使用到属性,那么就可以把这个方法定义为类方法
    对象方法和类方法的区别
    1.对象方法必须用对象来调用,类方法必须用类来调用
    2.对象方法中可以直接访问成员变量,类方法不可以
    3.调用类方法的效率会比调用对象方法高
    4.类方法和对象方法可以相互调用
        a.对象方法可以直接调用类方法
        b.类方法可以间接调用对象方法,创建对象,但是不要使用
        c.类方法可以调用类方法,对象方法可以调用对象方法
    5.类方法一般定义工具方法
    
    • 实现:写在 @implementation

        调用对象方法 [对象名 方法名称]
      

    类的本质##

    类其实也是一个对象,这个对象会在这个类第一次被使用的时候创建
    只要有了类对象,将来就可以通过类对象来创建实例对象
    实例对象中有一个isa指针,指向创建自己的类对象

    类对象保存了当前对象所有的对象方法
    当给一个实例对象方法消息的时候,会根据实例对象中的isa指针去对应的类对象查找


    如何通过一个类来创建对象##

    在oc中想要通过一个类来创建一个对象,必须给类发送一个消息
    [类名称/类名对象 方法名称]

    [ClassName new]
    

    调用 new 可以创建一个对象
    只要通过类调用new的方法,也就是给类发送一个new消息

     1.为类创建出来的对象创建存储空间
     2.初始化类创建出来的对象的属性
     3.返回类创建出来的对象对应的地址
    

    如果使用了指针保存了某一个对象的地址,称这个指针为某个类型的对象

        ClassName *p = [ClassName new];
    
    [ClassName new];
    [[ClassName alloc] init];
    //两者作用一致
    

    创建对象用后者,是一个编码规范


    + (void)load
    

    在程序启动就会将所有类的代码加载到内存中,放到代码区
    load方法就会在当前类被加载到内存的时候调用,有且仅会调用一次
    如果存在继承关系,会先调用父类的load方法,再调用子类的load方法

    + (void)initialize
    

    当当前类第一次被使用的时候就会调用(创建类对象的时候)
    initialize方法在整个程序运行的过程中只会被调用一次,无论使用多少次这个类都只会调用一次
    initialize用于对某一个类进行一次性的初始化
    如果存在继承关系,会先调用父类的initialize方法,再调用子类的initialize方法

    相关文章

      网友评论

          本文标题:objective-c 类

          本文链接:https://www.haomeiwen.com/subject/jpsnhftx.html