类方法和实例方法区别
Objective-C里面既有实例方法也类方法。类方法(Class Method) 有时被称为工厂方法(Factory Method)或者方便方法(Convenience method)。工厂方法的称谓明显和一般意义上的工厂方法不同,从本质上来说,类方法可以独立于对象而执行,所以在其他的语言里面类方法有的时候被称为静态方法。
注意点一:类方法
1,类方法可以调用类方法。
2,类方法不可以调用实例方法,但是类方法可以通过创建对象来访问实例方法。
3,类方法不可以使用实例变量。类方法可以使用self,因为self不是实例变量。
4,类方法作为消息,可以被发送到类或者对象里面去(实际上,就是可以通过类或者对象调用类方法的意思
注意点二:类方法和实例方法
1:实例方法是— 类开头是+ 实例方法是用实例对象访问,类方法的对象是类而不是实例,通常创建对象或者工具类。
在实例方法里,根据继承原理发送消息给self和super其实都是发送给self
在类方法里面self是其他的类的类方法,在类方法中给self发送消息只能发类方法self是类super也是
什么时候用类方法,要创建一个实例时候获取一个共享实例,或者获取关于类的一些共有信息
2:类方法(class method)和实例方法(instance method)。类方法被限定在类范围内,不能被类的实例调用(即脱离实例运行)。alloc就是一种类方法。实例方法 限定在对象实例的范围内(即实例化之前不能运行)。init就是一种实例方法,被alloc方法返回的对象实例调用。
instance method 以减号 “-” 开头
class method 以加号 “+” 开头,相当于static方法
1 #import <Foundation/Foundation.h>2 /*3 对象方法4 1> 减号 - 开头5 2> 只能由对象来调用6 3> 对象方法中能访问当前对象的成员变量(实例变量)7 8 类方法9 1> 加号 + 开头
10 2> 只能由类(名)来调用
11 3> 类方法中不能访问成员变量(实例变量)
12
13
14 类方法的好处和使用场合
15 1> 不依赖于对象,执行效率高
16 2> 能用类方法,尽量用类方法
17 3> 场合:当方法内部不需要使用到成员变量时,就可以改为类方法
18
19 可以允许类方法和对象方法同名
20 */
21
22
23 @interface Person : NSObject
24 {
25 int age;
26 }
27
28 // 类方法都是以+开头
29 + (void)printClassName;
30
31 - (void)test;
32 + (void)test;
33
34 @end
35
36 @implementation Person
37
38 + (void)printClassName
39 {
40 // error:instance variable 'age' accessed in class method
41 // 实例变量age不能在类方法中访问
42 //NSLog(@"这个类叫做Person-%d", age);
43 }
44
45 - (void)test
46 {
47 NSLog(@"111-%d", age);
48
49 //[Person test];
50 }
51
52 + (void)test
53 {
54 // 会引发死循环
55 //[Person test];
56
57 NSLog(@"333");
58
59 // 会引发死循环
60 // /[Person test];
61 }
62
63 @end
64
65 int main()
66 {
67 //[Person printClassName];
68
69 [Person test];
70
71 //Person *p = [Person new];
72 //[p test];
73
74 /*
75 -[Person printClassName]: unrecognized selector sent to instance 0x7fa520c0b370
76 */
77 // 系统会认为现在调用的printClassName是个对象方法
78 //[p printClassName];
79
80 return 0;
81 }
转载博客园 iOS_bowen.
类方法和实例方法区别相关推荐
- iOS的类方法和实例方法区别与使用
1.什么是类方法? 在OC类定义方法时以 + 开头的方法,又称为静态方法.如:+ (viod)方法名{ }. 作用:不用实例话就可以直接调用的方法,一般是有返回值的,返回对应的实例(数组.字符串等), ...
- 类变量,实例变量的区别以及类方法和实例方法的区别
一.类变量和实例变量的区别 1.类变量是属于是所有对象的,用static修饰,实例变量是属于某个对象的 2.类变量也叫静态变量,不需要通过创建实例就可以调用.而实例变量需要通过对象来访问,即需要创建对 ...
- 类方法与实例方法的区别
类方法与实例方法的区别 1.类方法--用static修饰的方法. 由于类方法是属于整个类的,不属于类的某一个实例(对象) 即类方法体有如下限制: 1.类方法中不能引用实例变量: 2.类方法中不能调用类 ...
- 类方法和实例方法的区别
类方法是属于类的,不是对象的. 类方法的调用可以是 类名.类方法() 或者 对象名.类方法() 而实例方法只能是 对象.实例方法名() 类方法只能访问类方法,实例方法可以访问类方法和实例方法. 类方法 ...
- python 类可以调用实例变量_python面向对象中类对象、实例对象、类变量、实例变量、类方法、实例方法、静态方法...
1. 类对象和实例对象 Python中一切皆对象,Python类本身也是一种对象,类定义完成后,会在当前作用域中定义一个以类名为名字的命名空间.类对象具有以下两种操作: 可以通过"类名()& ...
- 静态方法和类方法之间的区别
用@staticmethod装饰的函数和用@staticmethod装饰的函数有@staticmethod @classmethod ? #1楼 静态方法是一种对所调用的类或实例一无所知的方法. 它只 ...
- java 类方法和实例方法 调用关系
java 类方法和实例方法 1. 类方法 也可称静态方法,使用static修饰的类中方法: 2.实例方法 非静态方法,没有用static修饰的方法. 3.测试案例 public class Test ...
- python学习-类(类方法、实例方法、静态方法)
文章目录 基础知识补充 类方法.实例方法.静态方法 基础知识补充 Python面向对象-访问权限public和private 可以在属性的名称前面加上两个下划线__.如果一个变量以__开头,就变成了一 ...
- python静态变量和静态方法_python的静态成员变量、实例成员变量、静态方法、类方法、实例方法...
标签: 静态成员变量(类变量)和普通成员变量(实例变量) 静态成员变量只能通过类名.变量名获得,实例成员变量,通过该实例引用.变量名获得. 在实例对静态成员变量赋值时,实例 python是动态类型的语 ...
最新文章
- hadoop 2.0 详细配置教程
- 武汉锅检所检测机器人_嵊州市管道cctv机器人-检测服务,武汉天仪ty333,诚信承诺...
- shell中trap捕捉到信号的处理
- ES7和ES8的了解
- django07: 模板语言(旧笔记)
- jdk8新特性(二)Stream流式操作
- oracle 百万数据存储,jdbc oracle 百万级数据量存储
- SpringBoot之打包错误
- 浏览器内核选型列表,请大家继续补充
- 几种线性回归方法的简介
- Android开发技巧——实现底部图标文字的导航栏(已更新)
- android虚拟机运行app出现错误Unfortunately
- redis 无法启动
- Matlab中filter.m和filtfilt.m函数C语言实现
- 如何提高团队管理能力?
- Word 文件 删除后恢复出现乱码之解决方法
- R语言中使用UpSet包绘制多集合Venn图
- chrom flash提示地区不兼容, 亲测可用
- Sulfo-Cyanine5 dUTP(脱氧尿苷三磷酸)三磷酸盐是Cy5 dUTP的类似物
- opensips介绍
热门文章
- 男子马云性格与星座关系(转)
- word中遇到复制粘贴无法使用的解决方法
- Postgresql全文索引
- CSUST 四月选拔赛个人题解
- vue或者react的css样式初始(css样式重置)——reset.css与normalize.css
- stylegan3:Setting up PyTorch plugin “bias_act_plugin“... Failed或“upfirdn2d_plugin“... Failed
- C语言变量类型转换之float与int互相转换
- 在Excel中插入Word文档(转)
- 虚拟机里安装Mac操作系统的详细方法(文件下载+详细步骤)
- 【图神经网络】Pytorch图神经网络库——PyG异构图学习