zoukankan      html  css  js  c++  java
  • Objective-C类方法与对象方法、区别、与调用

    类方法.

    1. 特点:

    以加号( + )开头,

    调用格式:  [类名  方法名]

         类方法的好处:不需要创建实例对象,直 接通过类名访问,节省空间 ,提高了效率

     2.注意事项:

    类方法可以和实例方法同名, 相互之间互不影响

    类方法可以从父类继承而来,子类可以重写类方法 // ,如description类方法

    类方法和实例方法一样在interface里声明, 在implementation里实现。

    类方法由类名调用,  实例方法由对象调用。

    在类方法里使用了self, self指代的是调用者类

    在类方法中不能使用类的成员变量

    类方法和对象方法之间不能使用self 相互调用

    总结self : 谁调用当前方法, self就代表谁

    3.对象方法中可以调用其他对象方法

    1)当前对象方法中创建对象(可以是当前类的实例对象,也可以是其他类的实例对象),使用新创建的对象调用方法

    2)可以使用self

    3)对象作为方法的参数传递过来,可以使用传递过来的对象调用方法

    4.在类方法中可以调用其他类的方法

    1)可以直接使用类名(或者其他类名)调用类方法

    2)可以使用self

    5) 在类方法中可以调用对象方法

    1)对象作为方法的参数传递过来

    2)可以创建一个对象

    6.类方法和对象方法的比较

    对象方法以减号开头, 可以使用成员变量

    类方法以加号开头,不能使用成员变量

    7.类方法使用场景

    如果我们调用一个方法,该方法中不需要使用成员变量,那么我们可以将该方法声明为类方法

     以下代码是对上述部分知识点的验证

    main.m
    
    #import <Foundation/Foundation.h>
    #import "Dog.h"
    
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
    
            // 1. 通过类名调用eat类方法
            [Dog eat];
    
            // 2. 调用jump类方法
            Dog *dog = [Dog new];
            [Dog jump:dog];
    
    //        [dog bark];
    
        }
        return 0;
    }
    
    Dog.h
    
    
    #import <Foundation/Foundation.h>
    
    @interface Dog : NSObject
    //类方法和实例方法一样在interface里声明。
    +(void)eat;
    
    +(void)run;
    
    +(void)jump:(Dog *)dogDog;
    
    -(void)bark;
    
    -(void)sleep;
    
    @end
    
    Dog.m
    #import "Dog.h"
    
    @implementation Dog
    +(void)eat//类方法和对象方法一样在@implemention中实现
    {
        NSLog(@"狗正在吃");
        // 1.类方法里调用类方法 通过类名调用
    //    [Dog run];
    
        // 2. 类方法里调用类方法 通过self
        [self run];
    }
    
    +(void)run
    {
        NSLog(@"狗跑了");
    }
    
    +(void)jump:(Dog *)dogDog
    {
        NSLog(@"狗狗在跳");
        [dogDog bark];//类方法里调用对象方法 对象作为方法的参数传递过来
    
    
    }
    
    -(void)bark
    {
        NSLog(@"狗在叫");
    
        // 1. 调用的类方法
    //    [Dog run];
    
        // 2. 调用对象方法 自己调用自己陷入死循环
    //    [self  bark];
    }
    
    -(void)sleep
    {
        NSLog(@"狗玩累了,要睡觉了");
    }
    @end
    

    函数和对象方法的区别

    -(void)run;

    (1)对象方法的实现在@implementation...@end中

    对象方法的声明只能写在 @interface...@end中间

    (2)对象方法都以-号开头

    (3)对象方法只能由对象来调用

    (4)函数属于整个文件,可以写在文件中的任何位置,包括@implementation...@end中,但写在 @interface...@end会无法识别,函数的声明可以在main函数内部也可以在main函数外部。

    (5)对象方法归对象所有

    函数: void run(){

    }

    (1)所有的函数都是平行的

    (2)函数不存在隶属关系

    (3)使用的时候可以直接调用

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

    对象和方法之间的关系

    (1),对象作为方法的参数

    -(void) displayPerson:(Person *)person{
    
        NSLog("姓名:%@",person->name);
    
    }
    

    (2),对象作为方法的返回值

    -(Person *)changePerson:(Person *)person{
    
        person->name = @"唐僧";
    
        return person;
    
    }
    
  • 相关阅读:
    [分享]解决Ubuntu 16.04安装Vitis 2019.2失败的问题
    ZCU102 休眠到内存(suspend-to-ram)对DDR复位信号的设计
    PetaLinux使用bitbake提前下载所有软件包
    Ubuntu 16.04执行基本命令失败,恢复Python版本后正常
    Upgrade Zynq-7000 XIP reference design to Xilinx SDK 2018.3
    区块链入门到实战(26)之以太坊(Ethereum) – 挖矿
    区块链入门到实战(25)之以太坊(Ethereum) – 以太币单位
    区块链入门到实战(24)之以太坊(Ethereum) – 网络节点
    区块链入门到实战(23)之以太坊(Ethereum) – 虚拟机架构
    区块链入门到实战(22)之以太坊(Ethereum) – 账号(地址)
  • 原文地址:https://www.cnblogs.com/yilizhijiaotianxiashao-yincaiersanshijianduo/p/4725024.html
Copyright © 2011-2022 走看看