objc中的类方法和实例方法有什么本质区别和联系

  • 类方法:

    • 类方法是属于类对象的
    • 类方法只能通过类对象调用
    • 类方法中的self是类对象
    • 类方法可以调用其他的类方法
    • 类方法中不能访问成员变量
    • 类方法中不能直接调用对象方法
    • 类方法是存储在元类对象的方法缓存中
  • 实例方法:
    • 实例方法是属于实例对象的
    • 实例方法只能通过实例对象调用
    • 实例方法中的self是实例对象
    • 实例方法中可以访问成员变量
    • 实例方法中直接调用实例方法
    • 实例方法中可以调用类方法(通过类名)
    • 实例方法是存放在类对象的方法缓存中
时间: 2024-08-01 09:51:08

objc中的类方法和实例方法有什么本质区别和联系的相关文章

Python中的类方法、实例方法、静态方法

类方法 @classmethod 在python中使用较少,类方法传入的第一个参数是 cls,是类本身: 类方法可以通过类直接调用或者通过实例直接调用,但无论哪种调用方式,最左侧传入的参数一定是类本身. 通常情况下,类方法使用 @classmethod 装饰器来声明 实例方法 实例方法需要将类实例化后调用,如果使用类直接调用实例方法,需要显式的将实例作为参数传入:使用实例调用则不需要. 最左侧传入的参数 self,是实例本身. 静态方法 @staticmethod 指类中无需实例参与即可调用的方

JSP中脚本、声明和表达式的本质区别

原文地址:http://blog.csdn.net/csuliky/article/details/2444854 JSP脚本元素 使用JSP脚本元素可以将Java代码嵌入到JSP页面里,这些Java代码将出现在由当前JSP页面生成的Servlet中, 使JSP将静态内容与动态内容分离出来.脚本元素包含: 1. 表达式 表达式: 是对数据的表示,系统将其作为一个值进行计算. 语法:<%= expression %> 例如:<%=user.getName() %> 表达式的本质:在将

js中基本数据类型与引用数据类型的本质区别

代码 /** * 基本数据类型:string, number, boolean, null, undefined. * * 说明: * 基本数据类型的变量是保存在栈内存中的,基本数据类型的值 * 直接在栈内存中存储,值与值之间是独立存在的,修改一个变量不 * 会影响其他的变量. * * 比较: * 当比较两个基本数据类型的值时,本质上是比较值 */ // 创建number型变量a值为1 var a = 1; // 将变量a赋值给变量b,本质是值的拷贝 var b = a; console.log

深入解析 ObjC 中方法的结构

因为 ObjC 的 runtime 只能在 Mac OS 下才能编译,所以文章中的代码都是在 Mac OS,也就是 x86_64 架构下运行的,对于在 arm64 中运行的代码会特别说明. 在上一篇分析 isa 的文章从 NSObject 的初始化了解 isa中曾经说到过实例方法被调用时,会通过其持有 isa 指针寻找对应的类,然后在其中的 class_data_bits_t 中查找对应的方法,在这一篇文章中会介绍方法在 ObjC 中是如何存储方法的. 这篇文章的首先会根据 ObjC 源代码来分

类方法和实例方法区别

1.类方法和实例方法 类方法:不需要声明一个对象(实例),就可以直接引用.通常是有返回值的(否则类方法就无意义了,因为没有对象或者相应的成员变量的值可以设置) 类方法的特点: 1.声明和实现的时候,以(+)开头 2.类方法属于类的本身,只能通过类名调用 3.类方法不能直接访问成员变量 4.类方法不能直接调用对象方法(可以间接调用)    // 间接调用:1> 把对象当做形参传入    2> 在类方法中创建一个对象 例如:+ (instancetype)personWithName:(char

python的静态成员变量、实例成员变量、静态方法、类方法、实例方法

静态成员变量(类变量)和普通成员变量(实例变量) 静态成员变量只能通过类名.变量名获得,实例成员变量,通过该实例引用.变量名获得. 在实例对静态成员变量赋值时,实例 python是动态类型的语言,没有特别的标志区分静态成员变量和普通成员变量 如果你使用类名.成员变量    那这个成员变量现在就是静态成员变量(类变量) 如果你使用实例.成员变量    那这个成员变量现在就是普通成员变量(实例变量) 静态方法.类方法.实例方法      实例方法,类中的普通方法,由实例调用 类方法,被@classm

IOS类方法,实例方法

从昨天开始准备从Objective-C Programming: The Big Nerd Ranch Guide这本书入手,从头扎实地学习一下OC,顺便提高一下英文阅读能力. 今天的知识重点在于类方法和实例方法的区别: NSDate *now = [NSDate date]; We say that the date method is a class method. That is, you cause the method to execute by sending a message t

python3类方法,实例方法和静态方法

今天简单总结下python的类方法,实例方法,静态方法. python默认都是实例方法,也就是说,只能实例对象才能调用这个方法. 那是不是说类方法也只能被类对象本身来调用呢,当然,不是.类方法既可以被类对象调用,也可以被实例对象调用.你可以这样理解,假设我现在定义的是'dog狗',它有一个类方法'啃骨头',那么对于所有的狗是不是都可以调用啃骨头这个方法,既然这样,我现在创建一个'旺财'实例,它也同样可以去啃骨头,也就是能调用这个类方法. 静态方法你可以理解为参数可以随意设置的方法,类对象和实例对

python面向对象中类对象、实例对象、类变量、实例变量、类方法、实例方法、静态方法

1. 类对象和实例对象 Python中一切皆对象,Python类本身也是一种对象,类定义完成后,会在当前作用域中定义一个以类名为名字的命名空间.类对象具有以下两种操作: 可以通过"类名()"的方式实例化一个对象. 可以通过"类名.类属性"的方式来访问一个类属性. 如果说类时一种概念性的定义,是一种类别,那么实例对象就是对这一类别的具体化.实例化,即实例化对象是类对象实例化之后的产物. class Person:# 声明一个类对象 pass p1 = Person()