• initialize执行时机
          在向一个类执行实例方法或者类方法(除了initialize和load方法之外)的时候,触发initialize方法,因此如果一个类你没有使用的时候,是不会执行的。
 
  • initialize的执行顺序和次数
          initialize的执行顺序和普通方法一样遵从方法转发的规律,因此一个子类没有重载initialize方法时,将会调用父类的initialize方法。
          在扩展中重载这个方法中时,会覆盖掉原有类中得initialize方法,多个扩展覆盖initialize方法,将导致不确定的结果。
          initialize子类只会执行一次,对于父类来说,可能会来自子类的调用,可能执行多次
 
          下面是一个demo,说明一个initialize的执行规律
          
@interface initTest : NSObject
@end

@interface sub1 : initTest
@end

@interface sub2 : sub1
@property (nonatomic, strong) NSString *kvoTestStr;
@end

@interface sub2 (category1)
@end

@interface sub2 (category2)

@end
 
@implementation initTest

//+(void)initialize
//{
//    NSLog(@"%s|%@  ",__func__ ,[self class]);
//}

+(void)load
{
    NSLog(@"%s  ",__func__ );
}

@end

@implementation sub1

+(void)initialize
{
    NSLog(@"%s|%@  ",__func__ ,[self class]);
}

//+(void)load
//{
//    NSLog(@"%s  ",__func__ );
//}
@end

@implementation sub2

//+(void)initialize
//{
//    NSLog(@"%s|%@  ",__func__ ,[self class]);
//}

+(void)load
{
    NSLog(@"%s  ",__func__ );
}

@end

@implementation sub2 (category1)

//+(void)initialize
//{
//    NSLog(@"%s|%@  ",__func__ ,[self class]);
//}

+(void)load
{
    NSLog(@"%s  ",__func__ );
}

@end

@implementation sub2 (category2)

//+(void)initialize
//{
//    NSLog(@"%s|%@  ",__func__ ,[self class]);
//}

+(void)load
{
    NSLog(@"%s  ",__func__ );
}

@end
     执行结果
 
 
2015-05-26 13:44:58.757 OCinitTest[80219:72734510] +[initTest load] 
2015-05-26 13:44:58.758 OCinitTest[80219:72734510] +[sub2 load] 
2015-05-26 13:44:58.759 OCinitTest[80219:72734510] +[sub2(category1) load] 
2015-05-26 13:44:58.759 OCinitTest[80219:72734510] +[sub2(category2) load] 
2015-05-26 13:44:58.863 OCinitTest[80219:72734510] +[sub1 initialize]|sub1 
2015-05-26 13:44:58.863 OCinitTest[80219:72734510] +[sub1 initialize]|sub2 

2015-05-26 13:44:58.863 OCinitTest[80219:72734510] +[sub1 initialize]|NSKVONotifying_sub2  
 
  • initialize的作用
           在initialize中可以初始化一个单例。
 

  

static MySingleton *sharedSingleton;

+ (void)initialize
{
static BOOL initialized = NO;
if(!initialized)
{
initialized = YES;
sharedSingleton = [[MySingleton alloc] init];
}
}

Objetive-C initialize研究的更多相关文章

  1. Delphi主消息循环研究(Application.Run和Application.Initialize执行后的情况)

    Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; 第一步,貌似什么都不做,但如果提前定义I ...

  2. 深入研究Java类装载机制

    目录 1.为什么要研究java类装在机制? 2.了解类装载机制,对于我们在项目开发中有什么作用? 3.装载实现细节. 4.总结 一.为什么药研究Java类装载机制 java类加载机制,便于我们使用自定 ...

  3. jdk研究——java.lang

    jdk研究 volatile 是什么意思? 如何看jdk源码? 如何调试源码!---------仔细解读关键类,关键代码,常用的api的解释! 自己有疑问的不懂地方-------- 不懂的太多怎么办. ...

  4. 探索 OpenStack 之(13):研究 Keystone

    Keystone 是 OpenStack Identity Service 的项目名称.本文就试着尽可能深入地研究 Keystone. 1. Keystone 的功能 做为 OpenStack 云系统 ...

  5. 【MyEclipse 2015】 逆向破解实录系列【1】(纯研究)

    声明 My Eclipse 2015 程序版权为Genuitec, L.L.C所有. My Eclipse 2015 的注册码.激活码等授权为Genuitec, L.L.C及其付费用户所有. 本文只从 ...

  6. OAF_EO系列3 - Initialize详解和实现(案例)

    2014-06-14 Created By BaoXinjian

  7. Redis源码研究--字典

    计划每天花1小时学习Redis 源码.在博客上做个记录. --------6月18日----------- redis的字典dict主要涉及几个数据结构, dictEntry:具体的k-v链表结点 d ...

  8. 解析 this.initialize.apply(this, arguments)

    一. 起因 那天用到prototype.js于是打开看看,才看几行就满头雾水,原因是对js的面向对象不是很熟悉,于是百度+google了一把,最后终于算小有收获,写此纪念一下^_^. prototyp ...

  9. Cocos2d-x内存管理研究<二>

    http://hi.baidu.com/tzkt623/item/46a26805adf7e938a3332a04   上一篇我们讲了内核是如何将指针加入管理类进行管理.这次我将分析一下内核是如何自动 ...

随机推荐

  1. Mac下安装node.js和webpack

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "PingFang SC"; color: #393939 } p.p2 ...

  2. 查增删改MySQL数据库固定模式

    省略相关包的导入... public class Base { public static Connection connection = null; public static PreparedSt ...

  3. Webupload + MVC 之上传下载

    最近工作中用到了 MVC 的上传及下载 , 写下感受 本项目中用到的是百度的webuploader <!--引入Jquery--> <script src="~/Conte ...

  4. 最近一段OI学习计划

    1.在寒假的时间里尽量吧图论和DP的基础先学一下: 图论:数,二叉树,DFS.BFS遍历,然后最短路径(Floyd.dijkstra.SPFA),然后再最小生成树吧,如果还有时间的话(kruskal( ...

  5. 连接pgsql

    package com.jpzhutech.select; import java.sql.Connection; import java.sql.DriverManager; import java ...

  6. kali客户端攻击

    浏览器攻击 browser_autpwn2 (BAP2) mkdir /test 为接受响应的服务器创建目录   use auxiliary/server/browser_autopwn2  set ...

  7. Maven入门指南 :Maven 快速入门及简单使用

    开发环境 MyEclipse 2014 JDK 1.8 Maven 3.2.1 1.什么是Maven? Maven是一个Java语言编写的开源项目管理工具,是Apache软件基金会的顶级项目.主要用于 ...

  8. 图片翻转(Raw Image)

    int TransformImageBuffer(unsigned char* pImageBuffer, int width, int height,unsigned char* targetIma ...

  9. bone collector hdu 01背包问题

    Problem Description Many years ago , in Teddy’s hometown there was a man who was called “Bone Collec ...

  10. 6、iOS快速枚举

    今天在写程序的时候想在当前视图跳转的时候释放掉当前视图上面add的一些子视图.因为add的子视图有些是在别的类里面add进来的,当前页面不知道自己当前有哪几个类型的子视图.这样,我就想到了用循环遍历来 ...