Objective C类方法load和initialize的区别   过去两个星期里,为了完成一个工作,接触到了NSObject中非常特别的两个类方法(Class Method).它们的特别之处,在于iOS会在运行期提前并且自动调用这两个方法,而且很多对于类方法的规则(比如继承,类别(Category))都有不同的处理. 而因为这两个方法是在程序运行一开始就被调用的方法,我们可以利用他们在类被使用前,做一些预处理工作.比如我碰到的就是让类自动将自身类名保存到一个NSDictionary中. 先来…
1.+load方法当类或分类添加到object-c runtime时被调用,子类的+load方法会在它所有父类的+load方法之后执行,而分类的+load方法会在它的主类的+load方法之后执行.但不同的类之间的+load方法的调用顺序是不确定的,所以不要在此方法中用另一个类. 2.+load方法不像普通方法一样,它不遵循那套继承规则.如果某个类本身没有实现+load方法,那么不管其它各级超类是否实现此方法,系统都不会调用.+load方法调用顺序是:SuperClass -->SubClass…
在介绍两种类方法之前,NSObject Class Reference里对这两个方法说明: +(void)initialize The runtime sends initialize to each class in a program exactly one time just before the class, or any class that inherits from it, is sent its first message from within the program. (Th…
可能有些还不清楚load和initialize的区别,下面简单说一下: 首先说一下 + initialize 方法:苹果官方对这个方法有这样的一段描述:这个方法会在 第一次初始化这个类之前 被调用,我们用它来初始化静态变量. initialize方法的调用时机,当向该类发送第一个消息(一般是类消息首先调用,常见的是alloc)的时候,先调用类中的,再调用类别中的(类别中如果有重写):如果该类只是引用,没有调用,则不会执行initialize方法.两者方法的共同点:自动调用父类的,不需要super…
在iOS开发中,就像Application有生命周期回调方法一样,在Objective-C的类被加载和初始化的时候,也可以收到方法回调,可以在适当的情况下做一些定制处理.而这正是本篇文章所要介绍的load和initialize方法可以帮我们做到的. load和initialize的共同特点 load和initialize有很多共同特点,下面简单列一下: ● 在不考虑开发者主动使用的情况下系统最多会调用一次 ● 如果父类和子类都被调用,父类的调用一定在子类之前 ● 都是为了应用运行提前创建合适的运…
官方文档 Apple的官方文档很清楚地说明了 initialize 和 load 的区别在于: load 是只要类所在文件被引用就会被调用,而 initialize 是在类或者其子类的第一个方法被调用前调用. 所以如果类没有被引用进项目,就不会有 load 调用:但即使类文件被引用进来,但是没有使用,那么 initialize 也不会被调用.…
在NSObject.h中找到三个方法 + (void)load; + (void)initialize; - (instancetype)init 1. 可知三个方法类型,两个类方法,一个对象方法 2.load和initialize的区别 + (void)load: 程序运行时候会把相关的类都加载,但此时仅仅是将类加载到内存,程序实际运行的时候可能还没用到这类 (程序时按一定顺序,在后面的类还没用到,就不回使用相关类)     +load 方法会被默认执行,并且是在 main 函数之前执行的.…
在 NSObject 类中有两个非常特殊的类方法 +load 和 +initialize ,用于类的初始化.这两个看似非常简单的类方法在许多方面会让人感到困惑,比如: 子类.父类.分类中的相应方法什么时候会被调用? 需不需要在子类的实现中显式地调用父类的实现? 每个方法到底会被调用多少次? 下面,我们将结合 runtime(我下载的是当前的最新版本 objc4-646.tar.gz) 的源码,一起来揭开它们的神秘面纱. +load +load 方法是当类或分类被添加到 Objective-C r…
在 Objective-C 中,NSObject 是绝大多数类的基类.而在 NSObject 中有两个类方法 load 和 initialize,那这两个方法是在什么时机被调用呢?父类.Category 的调用顺序又是怎样的呢?本文解读一下这两个方法的区别于联系及使用场景. Load load方法在这个文件被程序装载时调用.只要是在Compile Sources中出现的文件总是会被装载,这与这个类是否被用到无关,因此load方法总是在main函数之前调用.这个很关键,也容易认知出错 调用顺序 如…
OC中有两个特殊的类方法,分别是load和initialize.本文总结一下这两个方法的区别于联系.使用场景和注意事项.Demo可以在我的Github上找到--load和initialize,如果觉得有帮助还望点个关注以示支持,总结在文章末尾. 先来看看NSObject Class Reference里对这两个方法说明: +(void)initialize The runtime sends initialize to each class in a program exactly one ti…
APP 启动到执行 main 函数之前,程序就执行了很多代码. 执行顺序: 将程序依赖的动态链接库加载到内存 加载可执行文件中的所有符号,代码 runtime 解析被编译的符号代码 遍历所有的 class 按继承层级一次调用 Class 的 load 和 category 的 load 方法. 一.+load +load 方法是当类或分类被添加到 Objective-C runtime 时被调用的,实现这个方法可以让我们在类加载的时候执行一些类相关的行为.子类的 +load 方法会在它的所有父类…
今天深圳天气有暴风雨,没有事情干,趁着周末和平常晚上写一篇关于Category知识的梳理!可能针对平常只会知道些category基本结论知道的人有些帮助,写这篇博客会按照下面的目录结合实例以及Category的源码进行一一讲解!!! Category的实现原理? Category中有load方法吗?load方法是什么时候调用的? load.initialize方法的区别是什么?它们在Category中的调用的顺序?以及出现继承时调用过程发生怎样的变化? Category能否添加成员变量?如果可以…
NSObject类有两种初始化方式load和initialize load + (void)load; 对于加入运行期系统的类及分类,必定会调用此方法,且仅调用一次. iOS会在应用程序启动的时候调用load方法,在main函数之前调用 执行子类的load方法前,会先执行所有超类的load方法,顺序为父类->子类->分类 在load方法中使用其他类是不安全的,因为会调用其他类的load方法,而如果关系复杂的话,就无法判断出各个类的载入顺序,类只有初始化完成后,类实例才能进行正常使用 load…
全文转载自:http://www.cocoachina.com/ios/20150104/10826.html 在Objective-C中,NSObject是根类,而NSObject.h的头文件中前两个方法就是load和initialize两个类方法,本篇文章就对这两个方法做下说明和整理. 1.概述 Objective-C作为一门面向对象语言,有类和对象的概念.编译后,类相关的数据结构会保留在目标文件中,在运行时得到解析和使用. 在应用程序运行起来的时候,类的信息会有加载和初始化过程.其实在Ja…
  一.load 方法什么时候调用: 在main方法还没执行的时候 就会 加载所有类,调用所有类的load方法. load方法是线程安全的,它使用了锁,我们应该避免线程阻塞在load方法. 在项目中使用的一些场景: 比如我们要统计所有页面(UIViewController.UITableViewController)的数据,可以在UIViewController的类别里的load方法里实现Method Swizzle @implementation UIViewController (BaseM…
OC load与initialize load 当类被引用进程序的时候会执行这个函数 一个类的load方法不用写明[super load],父类就会收到调用,并且在子类之前. Category的load也会收到调用,但顺序上在主类的load调用之后. initialize initialize的自然调用是在第一次主动使用当前类的时候 和load不同,即使子类不实现initialize方法,会把父类的实现继承过来调用一遍.注意的是在此之前,父类的方法已经被执行过一次了,同样不需要super调用.…
开发中实用方法固然是最贴近应用的,当一些程序原理还是要先搞清晰,根据查找的一些资料,总结了一些load与initialize的调用. APP启动到执行main函数之前,程序就执行了很多代码   执行顺序:                将程序依赖的动态链接库加载到内存 —> 加载可执行文件中的所有符号,代码runtime解析被编译的符号代码—>遍历多有的class—>按继承层级一次调用Class的load和category的load方法. 2个类初始化方法,+(void)load和+(v…
这篇文章来对比一下NSObject类的两个方法,+load与+initialize. + (void)load; Invoked whenever a class or category is added to the Objective-C runtime; implement this method to perform class-specific behavior upon loading. 不管一个类.类别是被动态加载或者静态链接,都会被发送load消息,但是只有新加入的类或者类别实现…
get 和 load 方式都是是根据 id 取得一个记录.下边详细说一下 get 和 load 的不同,因为有些时候为了对比也会把 find 加进来. 1.从返回结果上对比: load 方式检索不到的话会抛出 org.hibernate.ObjectNotFoundException 异常get 方法检索不到的话会返回 null 2.从检索执行机制上对比: get 方法和 find 方法都是直接从数据库中检索而 load 方法的执行则比较复杂■ 首先查找 session 的 persistent…
json.dumps 和 json.dump的区别,load和loads的区别…
总得来说: 1.+load方法是在main函数之前调用的: 2.遵从先父类后子类,先本类后列类别的顺序调用: 3.类,父类与分类之间的调用是互不影响的.子类中不需要调用super方法,也不会调用父类的+load方法实现: 4.无论该类是否接收消息,都会调用+load方法: 总得来说: 1.+initialize方法是在main函数之后调用的: 2.+initialize方法遵从懒加载方式,只有在类或它的子类收到第一条消息之前被调用的; 3.子类中不需要调用super方法,会自动调用父类的方法实现…
export export命令用于持久化容器(不是镜像).所以,我们就需要通过以下方法得到容器ID: sudo docker ps -a 接着执行导出: sudo docker export <CONTAINER ID> > /home/export.tar save Save命令用于持久化镜像(不是容器).所以,我们就需要通过以下方法得到镜像名称: sudo docker images 接着执行保存: sudo docker save busybox-1 > /home/save…
关于hibernate中的load,get,以及延迟加载问题 今天在使用hibernate时,发现一异常: could not initialize proxy - no Session 查询资料之后发现,这是一个lazy使用后的Exception,使用迟时加载,在session关闭后使用该对象的未加载变量,也就是说session已经关闭,对象或其属性没有保存到内存中,然后你使用了,导致该异常. 检查代码之后,发现此异常是由于Dao中获取评论使用load方法根据id加载对象导致的: public…
require 一般用于加载一个库,当多次使用require加载一个库时,只有第一次有效,后面的都会加载失败,也就是会返回"false",以为require会追踪文件是否被加载. 使用require加载库文件时,可以不带后缀".rb".一般放在文件的最前面. test2.rb文件内容如下: result=require "./test1" puts result result=require "./test1" puts re…
jquery的load把返回的数据放到指定的元素中,不是全局函数:jquery的get把返回的数据交给用户处理,是全局函数. load和get同样是jquery的ajax函数,load的实现,几乎等于get之后再设置网页元素,在ajax获取机制上没有区别,但要注意的是,load方法另一个和get的重要区别,就是load允许指定要插入的远程文档的某个部分,比如:$("#result").load("test.html #page2"); load是最简单的ajax加载…
NSObject是一切OC类的基类,所以我们必须对NSObject所有的方法有一个清楚的认识. + (void)load; 当类或者分类被加入到runtime时,load方法会被调用,也就是说在main循环开始前load方法就已经被调用. (当类被加载到进程的address space时,runtime就会给每个类发送load消息.For classes that are in a shared (dynamically-loaded) library, the runtime sends th…
load和个体方法都可以充分利用内部缓存和二级缓存中的现有数据. ************************************************************************** Session.load/get方法均可以根据指定的实体类和id从数据库读取记录,并返回与之对应的实体对象.其区别在于: 如果未能发现符合条件的记录,get方法返回null,而load方法会抛出一个ObjectNotFoundException. Load方法可返回实体的代理类实例,…
python的类方法需要在方法前面加装饰器:@classmethod ,静态方法是在方法前面加装饰器:@staticmethod. 类方法.类属性是属于类自身,属于类自身的命名空间,和实例方法.实例属性不在一个命名空间下. 实例对象和类都可以直接调用类方法.实例方法和静态方法,区别在于:在类方法和静态方法内部不能调用实例属性. class Base: def __init__(self): print "base begin..." def prints(self): print &q…
最近在学习SHH框架中的hibernate,对Session的get和load方法,有点混不清楚,不知道区别在哪,或者对它们的区别感触不深.所以百度了一下,结果问题来了.百度的结果和实际测试的结果出入很大.主要是对get方法的说法跟实际运行的结果不一致. 先说一下观点吧: get不支持lazy,load支持lazy: 数据不存在时,get返回null,load则抛出ObjectNotFoundException异常. load方法可以返回实体的代理类实例,而get方法直接读取数据库,所以直接返回…
load: 当类被引用进项目的时候(类文件加载到系统中)就会执行load函数(在main函数开始执行之前),与这个类是否被用到无关,每个类的load函数只会自动调用一次.由于load函数是系统自动加载的,因此不需要调用父类的load函数,否则父类的load函数会多次执行. 1.当父类和子类都实现load函数时,父类的load方法执行顺序要优先于子类 2.当子类未实现load方法时,不会调用父类load方法 3.类中的load方法执行顺序要优先于类别(Category) 4.当有多个类别(Cate…