单例中涉及的static,load,initialize
2015-09-10 16:01
260 查看
单例模式:懒汉式:第一次用到单例对象时,在创建(适用移动端)
饿汉式:一进入程序就创建一个单例对象:(在load方法里,alloc单例对象)
单例:
1. 创建唯一的单例对象:static修饰全局变量a
2. 重写allocWithZone,copyWithZone方法,定义shared+类名方法
3. if(a==nil){//防止频繁加锁
@synchronized(self){加上线程锁
if(a==nil){//防止多次创建
a = [super allocWithZone:zone];
}}}
static:1. 修饰变量
2. 修饰函数
修饰变量:
1. 修饰局部变量:
a. 能保证局部变量永远只初始化1次,在程序运行过程中,永远只有1份内存
b. 局部变量的生命周期 跟 全局变量 类似; 但是不能改变作用域(定义在方法体里面只能在该方法体范围内使用)
2. 修饰全局变量:
a. 是全局变量的作用域仅限于当前文件内部,可以防止所修饰的全局变量在其他文件里被引用
b.在C语言你在一个类A的.m文件里面这么声明一个全局变量id _instance:
1. 不仅仅是在A类里面可以使用全局变量_instance,理论上,在其他的文件里也可以使用全局变量instance
2. 若真的在其他文件里使用使用全局变量_instance,系统会报错,提示_instance未定义
3. 你可以其他文件里用extern id _instance---引用某个全局变量(并非定义)
NSObject:
//当类加载到OC运行时环境中(内存),就会掉用一次(一个类只会加载一次)---没用到就会调用
//但此时装载进内存的类是不可用的,因为类刚装载进内存,创建不了对象(这句待定)
+(void)load{
}
//当第一次使用这个类的时候才会掉用(一个类只会加载一次)
+(void)initialize{
}
所以是先调用load,在调用initialize, 两个方法都只会调用一次
饿汉式:一进入程序就创建一个单例对象:(在load方法里,alloc单例对象)
单例:
1. 创建唯一的单例对象:static修饰全局变量a
2. 重写allocWithZone,copyWithZone方法,定义shared+类名方法
3. if(a==nil){//防止频繁加锁
@synchronized(self){加上线程锁
if(a==nil){//防止多次创建
a = [super allocWithZone:zone];
}}}
static:1. 修饰变量
2. 修饰函数
修饰变量:
1. 修饰局部变量:
a. 能保证局部变量永远只初始化1次,在程序运行过程中,永远只有1份内存
b. 局部变量的生命周期 跟 全局变量 类似; 但是不能改变作用域(定义在方法体里面只能在该方法体范围内使用)
2. 修饰全局变量:
a. 是全局变量的作用域仅限于当前文件内部,可以防止所修饰的全局变量在其他文件里被引用
b.在C语言你在一个类A的.m文件里面这么声明一个全局变量id _instance:
1. 不仅仅是在A类里面可以使用全局变量_instance,理论上,在其他的文件里也可以使用全局变量instance
2. 若真的在其他文件里使用使用全局变量_instance,系统会报错,提示_instance未定义
3. 你可以其他文件里用extern id _instance---引用某个全局变量(并非定义)
NSObject:
//当类加载到OC运行时环境中(内存),就会掉用一次(一个类只会加载一次)---没用到就会调用
//但此时装载进内存的类是不可用的,因为类刚装载进内存,创建不了对象(这句待定)
+(void)load{
}
//当第一次使用这个类的时候才会掉用(一个类只会加载一次)
+(void)initialize{
}
所以是先调用load,在调用initialize, 两个方法都只会调用一次
相关文章推荐
- zTree自定义Title属性
- 0909 第一次作业
- annotation(@Retention@Target)详解
- 数据库测试用例要点
- 使用Highcharts显示饼图时,浏览器崩溃,响应不过来
- Java中的static关键字
- checkbox全选及全选遍历获得值
- iScroll 4.2.5 中文API
- 十进制转化为12进制
- @@IDENTITY,SCOPE_IDENTITY()和IDENT_CURRENT('TableName') 用法
- 0909 对编译原理的想法
- dbca建库时找不到ASM磁盘
- 浅谈SQL SERVER中事务的ACID
- @interface和 @property 方式声明变量的区别
- 360兼容模式==ie8 兼容模式下 span标签占位问题
- 0909编译原理的理解
- c++用法的学习心得
- 指针的大小到底是由谁决定?是多少?
- playframework 2.4x 表单inputRadioGroup中label属性无效
- HashSet源码分析1