对block,单例模式的理解及使用
来源:互联网 发布:怎样修改淘宝销量显示 编辑:程序博客网 时间:2024/05/18 20:50
1.block的使用与理解:
(1)block是一个独立的代码块,可以当做参数传,从而提高代码的复用性与可读性。
(2)block可以当做函数的参数传递:-(void)getArea:(void(^)(int W,int H))block;
(3) block也可以当做属性传值:@property(nonatomic,copy)void(^block)(NSString *)name
***注意:block作属性传值的时候,要用copy修饰,因为block是分配在栈里面的不需要程序员手动管理,但是我们使用时是在堆里面操作所以需要copy一份进行操作;当在block里面进行操作时,初始化变量,在block外要记得用__block(MRC中,ARC用__weak修饰符)对实例变量进行修饰,从而避免循环应用。
例子:
- brush.getCardInfo=^(NSDictionary *info){
- [self test];
- };
但是这又带来另一个问题,就是self的引用计数+1。这意味着很可能会导致循环引用。self持有brush,brush持有block,block持有self。结果就是内存泄漏。
解决的办法如下:
- __block CurrentViewController* blockSelf = self;
- brush.getCardInfo=^(NSDictionary *info){
- [blockSelf test];
- };
通过这个方式,告诉block这个变量的引用计数不要+1。
2.单例的理解与使用:
(1)单例模式就是一个实例,保证一个类只有一个实例,单例的方法是一个类方法,保证类中的对象只会被初始化一次,从而避免对象里面的数据再次初始化而清空。
(2)单列的优点
(3)在oc中创建单例类的步骤:
01.声明一个静态变量并置为空:static Tree *tree = nil;
02.实现单例的方法:
+(id)manager
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
trees = [[Tree alloc]init];
NSLog(@"我是一个单列");
});
return trees;
}
在另一个类调用时,只需要用单例的类调用即可。+
+
}
- 对block,单例模式的理解及使用
- 对单例模式的理解
- 我对单例模式的理解
- 对单例模式的理解
- 对单例设计模式的理解
- 对单例模式的理解
- 个人对单例模式和观察者模式及事件的一点理解
- 对工厂模式与单例模式的理解
- 对block的理解
- 对block的理解
- 对 block 的理解
- 对java servlet 单例模式的理解
- 简单总结我对单例模式的理解
- 对java servlet 单例模式的理解
- 我对单态模式的理解
- 对单例模式Singleton的理解以及四种线程安全的单例模式
- 单例模式的创建及使用
- 个人对单例设计模式理解
- PAT1036 跟奥巴马一起编程
- 不规则窗体
- 【代码片段】python战舰
- 分布式和集群基本介绍
- mp4文档ISO/IEC 14496 part 12解读
- 对block,单例模式的理解及使用
- 使用Struts的Token机制解决表单的重复提交
- IO - 同步,异步,阻塞,非阻塞 (亡羊补牢篇)
- 网络子系统在链路层的收发过程剖析
- CSS定位机制——普通流、浮动、定位
- windows下tomcat7+solr5.1+zookeeper3.4.6 伪集群SolrCloud配置
- Android利用POI操作excel方法总结
- local_save_flags与local_irq_restore
- 第五章 Vim的命令行模式