一起养成写作习气!这是我参加「日新计划 4 月更文应战」的第1天,点击检查活动概况。

提到懒加载,或许99%搞iOS开发的同学都会用过,众所周知,懒加载就是用到的时候再加载,一般咱们都用作属性上面,经过self.xx来完成。那么OC办法的懒加载你听说过吗?用过吗?下面就是经过runtime来完成一下办法的懒加载,玩一下。

首先创建一个Person类,.h文件里边什么都不用写

OC懒加载方法

ViewController中导入头文件开端玩

OC懒加载方法

viewdidload办法中初始化person并调用person的eat办法,此刻能够看到xcode编译正告eat办法,假如咱们现在运转代码,就会crash,由于找不到这个办法,找到Person.m

OC懒加载方法

Objective C 供给了一种名为动态办法抉择的手法,使得咱们能够在运转时动态地为一个 selector 供给完成。咱们只需完成 +resolveInstanceMethod: 或 +resolveClassMethod: 办法,并在其中为指定的 selector 供给完成即可(经过调用运转时函数 class_addMethod 来增加)。这两个办法都是 NSObject 中的类办法,其原型为:

  • (BOOL)resolveClassMethod:(SEL)name;

+ (BOOL)resolveInstanceMethod:(SEL)name;

简略来说就是,当这个类被调用了没有完成的办法,就会进入该办法来。

参数 name 是需要被动态抉择的 selector;回来值文档中说是表示动态抉择成功与否。但在上面的例子中(不涉及音讯转发的情况下),假如在该函数内为指定的 selector 供给完成,不管回来 YES 还是 NO,编译运转都是正确的;但假如在该函数内并不真正为 selector 供给完成,不管回来 YES 还是 NO,运转都会 crash,道理很简略,selector 并没有对应的完成,而又没有完成音讯转发。

resolveInstanceMethod 是为目标办法进行抉择,

而 resolveClassMethod 是为类办法进行抉择。

先简略运转一下代码,打印一下SEL看看办法是什么

OC懒加载方法

能够清楚的看到就是之前调用的eat,接下来用动态办法抉择手法来修改上面的代码:

OC懒加载方法

解析:

OC懒加载方法

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。