OC懒加载方法2

142 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第2天,点击查看活动详情

这个函数里面有4个参数,我们打开帮助看看官方是怎么说的。

image.png

参数1,需要添加方法的类。[Pseron class]

参数2,需要添加的方法,就是参数sel,刚才NSLog过了,就是eat

参数3就比较复杂了,书面翻译是需要填入一个函数,而这个函数需要有两个参数一个是self,一个是_cmd。那么我们可以返回刚才的实现代码看一下,这里又get了一个知识点就是,所有的C语言的函数里面,都有这两个隐式参数,只要调用系统都会传递进来。然后继续看官方文档,class_addMethod([self class], @selector(resolveThisMethodDynamically), (IMP) myMethodIMP, "v@:"); 这是官方给出的调用方式。 可以看到,参数3是用(IMP)强转过的函数,所以参数3就是(IMP)eat

参数4,字面解释是描述该方法参数类型的字符数组。可能的值,看Objective-C Runtime Programming Guide > Type Encodings。因为函数必须至少有两个参数自_cmd,第二和第三个字符必须是"@:"(第一个字是返回类型)。打开文档,可以看到

image.png

官方文档

因为我们的eat返回值是void,所以使用"v",加上官方要求的值放在一起就是"v@:"。

接下来我们实现一下带参数的方法

[p performSelector:@selector(play:) withObject:@"王者荣耀"];

image.png

带参数的方法

我们在参数四字符串后面继续拼接参数就好。

懒加载的好处

  • 懒加载体现了OC的延迟加载思想,什么时候用什么时候加载;

    cell中imageView属性, tabbar中item都是通过懒加载的方式实现的;
    
  • 懒加载可以打破对象彼此引用时,先后声明的限制;

  • 不必将创建的代码全部写在- (void)viewDidLoad方法中,增加了代码的可读性;

  • 每个属性的getter方法中分别负责各自的实例化处理,代码彼此之间的独立性强,耦合性低;