ios 类方法和实例方法的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ios 类方法和实例方法的区别相关的知识,希望对你有一定的参考价值。

参考技术A 类方法: 也被称为静态方法,指 static关键字修饰的方法。此类方法属于类本身的方法,不属于类的某一个实例(对象)。在类方法中不可以直接使用实例变量。其调用方式有三种,可直接调用、类名、方法名、对象名。

实例方法:指的是不用static关键字修饰的方法,每个实例对象都有自身的实例方法,互相独立,不共享。其调用方式只能是对象名,方法名。

何时用静态方法,何时用类方法?
实例方法: 当你给一个类写一个方法,如果该方法需要访问某个实例的成员变量时,那么方法该被定义为实例方法。 一个类的实例通常有一些成员变量,其中含有该实例的状态信息。而该方法需要改变这些状态,那么该方法需要声明成实例方法。

类方法(静态方法):它不需要访问某个实例的成员变量,不需要改变某个实例的状态,我们把该方法定义为静态方法。

类方法和实例方法的误区:
静态方法常驻内存,实例方法不是。所以静态方法效率更高,但占内存。。(错误的)
事实上,方法都是一样,在加载时机和占用内存上,静态方法和实例方法是一样的。在类型第一次被使用时加载,调用的速度基本没有差别

静态方法在堆上分配内存,实例方法在栈上(错误)
事实上,所有的方法都不可能在堆上或者栈上分配内存,方法作为代码是被分配到特使的代码内存区域,这个代码内存区域是不可写的。

实例方法需要先创建实例才可以调用,比较麻烦,静态方法不用,比较简单。(错误)
事实上,如果一个方法不访问某实例成员变量或者不改变实例状态,那么就应该写成静态方法。

常用实例和类
第一种方式:声明实,调用实例方法
当一个类有多个实例,例如学生这个类,实例可以有学生甲乙丙丁。etc 我们就用第一种方式,在多线程的情况下,只要每个线程创建自己的实例,那么第一种方法通常是线程安全的

第二种:通过静态的实例去调用实例方法
参考技术B 1、类方法是属于整个类,而不属于某个对象。2、类方法只能访问类成员变量,不能访问实例变量,而实例方法可以访问类成员变量和实例变量。3、类方法的调用可以通过类名.类方法和对象.类方法,而实例方法只能通过对象.实例方法访问。4、类方法只能 参考技术C ios中的类方法和实例方法,开头为-号通知object-c编译器,该方法是一个实例方法 +号,它表示类方法 类方法 - - -是对类本身执行某些操作的方法例如创建类的实例

成员变量实例变量类变量成员方法实例方法类方法的区别

简单来说:
类体的定义包括成员变量的定义和方法的定义。 
1、成员变量包括实例变量和类变量;而成员方法包括实例方法、类方法,当然还有一种特
殊的构造方法。  
2、类变量、类方法就是类中的变量、方法,必须是静态的,要加static;故其又称静态变量

、静态方法。
3、成员变量、成员方法是对象或实例中的变量、方法,不加static;  
类变量:静态域,静态字段,或叫静态变量,它属于该类所有实例共有的属性,在内存中只
有一个地方存储这个变量。而且所有的实例都可以修改这个类变量的值(前提是这个类变量没

有被final修饰,否则是常量了),而且访问类变量的时候不用实例,直接用类就可以了。
 
类方法:和类变量一样,可以不用实例,直接用类就可以调用类方法。 
实例变量:实例域,实例字段,或叫成员变量。 
实例方法:或叫成员方法,必须先有实例,然后才能通过实例调用该实例方法。 
使用方法:类方法可以直接调用类变量和类方法              
          类方法不可以直接调用实例变量和实例方法               
          类方法中没有this,因为没有实例,this不知道调用哪个实例             
          类方法可以从类里面直接访问类成员             
          实例方法可以调用类方法,访问类变量,但是不提倡这样做,会把类方法和类变
量混淆成实例方法和实例变量

以上是关于ios 类方法和实例方法的区别的主要内容,如果未能解决你的问题,请参考以下文章

iOS 开发:成员变量(属性,实例变量)的相关知识

iOS开发中 类对象实例变量成员变量属性变量等区别和关系

iOS开发:分类添加属性,不会添加实例变量

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

iOS中堆和栈的区别

JAVA类与对象---实例变量与类变量的区别,实例方法和类方法的区别