您的位置:首页 > 其它

单例中涉及的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, 两个方法都只会调用一次
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: