iOS开发-类的加载load函数和initialize函数

简要概括

load是类加载方法,initialize是类初始化方法。

要点

不需要调用super的方法。

initialize和load方法系统只调用一次,开发者可以多次调用(可以,但是不建议)。

类加载到系统调用load方法,类首次使用调用initialize方法。

initialize和load的方法不要添加太多逻辑,类比不要在初始化方法做太多操作。

initialize中可以实现无法在编译期初始化的全局变量,load的方法中可以实现swizzling的逻辑。

load的调用并不视为类的第一个方法完成,因为load中调用了当前类中的方法,就先去执行initialize方法。

load方法调用的顺序:父类(Superclass)的方法优先于子类(Subclass)的方法,类中的方法优先于类别(Category)中的方法。

所有类别(Category)中的load方法都会执行,和普通函数的替换效果不同。

最后一个类别(Category)中的initialize方法会覆盖之前类别和类中的initialize方法。

思考题

1,有类A继承类P,类B承类P,那么三个类的load方法、initialize方法的调用先后顺序是如何决定?

2,有类A,有类A的类别C1,有类A的类别C2,如果A、C1、C2都实现了load,调用的先后顺序是如何决定?

参考

iOSmain函数之前的调用

load和initialize函数

时间: 2024-12-05 09:29:47

iOS开发-类的加载load函数和initialize函数的相关文章

IOS开发之异步加载网络图片并缓存本地实现瀑布流(二)

/* * @brief 图片加载通用函数 * @parma imageName 图片名 */ - (void)imageStartLoading:(NSString *)imageName{ NSURL *url = [NSURL URLWithString:imageName]; if([_fileUtil hasCachedImage:url]){ UIImageView *imageView = [[UIImageView alloc] init]; NSString *path = [_

[iOS开发]WKWebView加载JS

最近项目要用webView加载js文件,挺同事说WKWebView比UIWebView更加好用,于是我今天就试试,百度一发,自己写了个demo. 先看我写的代码,然后再来看WKWebView跟UIWebView的区别: 首先,遵循这两个协议WKNavigationDelegate,WKScriptMessageHandler. 接着,获取JS文本. JS交互 - (void)getJS { NSString * js = @"window.webkit.messageHandlers.obser

iOS开发:UITableView加载多张照片导致内存上涨的问题

最近在写一个文件管理的页面,里面功能挺多的,有缩略图下载(socket),有文件下载(http). 说说缩略图下载这一块,我的UITableView的一个cell要加载四张缩略图,iPhone5s的屏幕能加载8行.大概UI上是这样布局的.(另外缩略图需要一张张下载) 刚开始进到文件管理界面,内存占用20几M,随着缩略图不断下载下来内存在上涨,我不断的往上拉,内存一值在涨.达到一定值app出现闪退.大概是300多M的时候闪退.什么原因造成的呢? 先看下图: 我是这样写的:建立一个对象,这个对象有一

iOS开发中懒加载的使用和限制

1.在开发过程中很多时候,很多控件和对象需要alloc为了,提高开发效率使得懒加载得以产生. 2.下边用代码解释: 1 - (NSMutableArray *)newsArr{ 2 if (!_newsArr) { 3 self.newsArr = [NSMutableArray array];//1 4 5 // 2. _newsArr = [[NSMutableArray alloc]init]; 6 7 // 3. _newsArr = [NSMutableArray array]; 8

iOS开发之——懒加载

★懒加载即延时加载,即当对象需要用到的时候再去加载.其实就是重写对象的get方法,当系统或者开发者调用对象的get方法时,再去加载对象. ★注意: 1. 如果是懒加载的话则一定要注意先判断是否已经有了,如果没有那么再去进行实例化            2. 在getter方法里切勿使用self.自己,因为self.自己会调用getter方法,造成死循环 ★使用懒加载的好处: 1. 不必将创建对象的代码全部写在viewDidLoad方法中,代码的可读性更强            2. 每个控件的g

【转】Android类动态加载技术

http://www.blogjava.net/zh-weir/archive/2011/10/29/362294.html Android应用开发在一般情况下,常规的开发方式和代码架构就能满足我们的普通需求.但是有些特殊问题,常常引发我们进一步的沉思.我们从沉思中产生顿悟,从而产生新的技术形式. 如何开发一个可以自定义控件的Android应用?就像eclipse一样,可以动态加载插件:如何让Android应用执行服务器上的不可预知的代码?如何对Android应用加密,而只在执行时自解密,从而防

jvm系列(一):java类的加载机制

java类的加载机制 原文:http://www.cnblogs.com/ityouknow/p/5603287.html 1.什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构.类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口. 类加载器并不需要等到某个

类的加载到反射reflect

类的加载: 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载.连接.初始化这三个步骤来实现对这个类进行初始化. 加载: 就是指将class文件加载进入内存,并为之创建一个Class对象 任何类被使用时,系统都会创建一个Class对象 连接: 验证: 是否有正确的内部结构,并且和其他类协调一致 准备: 负责为类的静态成员分配内存,并设置默认初始化值 解析: 将类的二进制数据中的符号引用替换为直接引用 初始化:就是以前我们讲过的初始化步骤 类初始化的时机: 创建类的实例 访问类的静

类本质的是? 类的加载过程?

类本质的东西 类也是一个对象: Person对象的类型是Class类型,Class里面包含了* 类本身也是对象,是个Class类型的对象:简称类对象: 利用Person类对象 创建Person类型的对象: 利用Class类型创建Person类对象: //获取内存中的类对象 Class c = [p class]; Class c2 = [p2 class]; 也可以用Person类来获取类对象: Class c3 = [Person Class]; 我们要查看p和p2的类对象,就是利用类方法cl