参考资源
Objective-C中类方法、对象方法介绍及区别
iOS---类方法(静态方法)和实例方法
iOS 类方法与实例方法
对象方法
1.以-开头的方法
2.对象方法只能由对象来调用
3.[对象名 对象方法]
4.对象方法中可以访问当前对象的成员变量
5.实例方法在栈上
类方法
1.以+开头的方法
2.类方法只能由类来调用
3.重写类方法时 用self 调用类方法 因为如果用类名 在编译阶段就确定了是用
哪个类来调用 用self是在运行期间确定用哪个类来调用该方法
4.[类名 类方法]
5.类方法不能访问实例变量 成员变量 "因为类方法由类调用 并没有创建存储
6.静态方法在堆上分配内存
空间来存储类中的成员变量"
类方法的好处
不依赖于对象 无需动态分配 执行效率更高
使用类方法的场景
1.当方法内部不需要使用成员变量时
2.类方法一般用于编写工具方法
3.对象方法和类方法可以同名
image.png
实例对象里的self,是对象的首地址
类方法里的self,是Class
区别
1)静态方法常驻内存 实例方法不是 所以`静态方法效率高但占内存`
事实上,方法都是一样的,在加载时机和占用内存上,静态方法和实例方法是一
样的,在类型第一次被使用时加载。调用的速度基本上没有差别
2)静态方法在堆上分配内存 实例方法在栈上
事实上所有的方法都不可能在堆或者堆栈上分配内存,方法作为代码是被加载到
特殊的代码内存区域,这个区域是不可写的
3) `实例方法需要先创建实例才可以调用`
4) `静态方法是静态绑定到子类 不是被继承`
5) `一般使用频繁的方法用静态方法 用的少的用动态的 静态的速度快 占内存
动态的稍微速度慢点 但是调用完后 立即释放类 可以节省内存 可以根据自己的
需要选择是动态方法还是静态方法 `
6) 静态方法修改的是类的状态 而对象修改的是各个对象的状态
7) 类的实例调用是在类的生命周期中存在 当类没有了之后 对应的实例也就没
有了 对应的方法也没有了 静态方法不然 只要你引用了那个静态来的命名空间
它就会一直存在 直到我们推出系统
8) 类方法只要创建了运行就会生成内存 并且可以直接调用 类名+ 方法名就
可以 而实例方法是调用的时候才会生成内存
9) 静态方法在程序开始时生成内存 实例方法在程序运行时生成内存
所以静态方法可以直接调用 实例方法要先生成实例 通过实例调用方法 静态方法
速度更快 但是多了会占用内存
10) 静态方法是连续的 因为是在程序开始就生成了 而实例申请的是离散空间
网友评论