博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OC 实例方法和类方法区别
阅读量:4703 次
发布时间:2019-06-10

本文共 2015 字,大约阅读时间需要 6 分钟。

 
     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 
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 : NSObject24 {25 int age;26 }27 28 // 类方法都是以+开头29 + (void)printClassName;30 31 - (void)test;32 + (void)test;33 34 @end35 36 @implementation Person37 38 + (void)printClassName39 {40 // error:instance variable 'age' accessed in class method41 // 实例变量age不能在类方法中访问42 //NSLog(@"这个类叫做Person-%d", age);43 }44 45 - (void)test46 {47 NSLog(@"111-%d", age);48 49 //[Person test];50 }51 52 + (void)test53 {54 // 会引发死循环55 //[Person test];56 57 NSLog(@"333");58 59 // 会引发死循环60 // /[Person test];61 }62 63 @end64 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 0x7fa520c0b37076 */77 // 系统会认为现在调用的printClassName是个对象方法78 //[p printClassName];79 80 return 0;81 }

 

 

转载于:https://www.cnblogs.com/oc-bowen/p/5021409.html

你可能感兴趣的文章
一种链表的实现
查看>>
vue中ESlint报错
查看>>
NetCore2.0 RozarPage自动生成增删改查
查看>>
0816 1459 json & pickle ,目录导入,目录规范
查看>>
Alpha 冲刺 (10/10)
查看>>
哈希取余法、哈希表大小取质数的问题
查看>>
DataStage系列教程 (Pivot_Enterprise 行列转换)
查看>>
mysql常用操作
查看>>
对以内部 git 仓库为 composer 依赖的 package,加上版本号
查看>>
新生力量之我见
查看>>
一致性hash算法实现
查看>>
简化日常工作系列之一 ---- 自动新建每日记录
查看>>
【信号、图像、Matlab】如何得到高斯滤波器的整数模板
查看>>
[转]Vi 教程(Unix行编辑器)
查看>>
第4周小组作业:WordCount优化
查看>>
布隆过滤去重,及分布式爬虫配置
查看>>
Redis 持久化
查看>>
struts2源码分析之流程
查看>>
青蛙跳
查看>>
数据类型、操作符
查看>>