- 博客(13)
- 收藏
- 关注
原创 iOS 享元设计模式 (flyweight design model)
定义: 享元模式是 一种 可共享 对象的一种设计模式。在需要使用大量的细粒度 对象的过程中。这种模式 能很大的减少内存和提升性能。 所谓 细粒度,就是对象相近 而且 数量很多。 我们把这些对象 分成 内部状态 和 外部状态。 内部状态 只使用一个对象来共享,外 部 。外部状态 不能共享出来,是对象区分的。 大体实现: 实现享元模式需要两个关键组件,通
2017-09-27 17:41:01 517 1
原创 iOS 多线程安全高效的访问数据
在 上篇 博客我们讲到 多线程访问数据时会出现数据不正常的问题。现在我们来讲如何安全而且高效的访问数据。方案一: 我们使用 @synchronized 方式 来解决 假设在 controller 中 有如下的属性@property (nonatomic,assign)NSInteger synchronizedTickets;- (void)syncronized{
2017-07-08 14:50:47 803
原创 iOS NSCopy 和 NSMutableCopy
主要 原则是:Copy 可变对象 A 生成 一个 不可变的 B Copy 不可变对象 C 不会生成新的对象 只是浅拷贝 拷贝指针 MutableCopy 不论是 可变还是 不可变的 对象 都生成 一个可变的 新的 对象 。
2017-07-07 17:54:40 553
原创 iOS Block 中 循环引用的解决
前言: 在iOS 中使用block 时 ,如果稍微不注意,则很容易 导致 循环引用 导致内存泄漏 二者都无法释放 。出现内存泄漏。#import typedef void (^EOCNetworkFetcherCompletionHandler)(NSData *data);@protocol EOCNetworkFetcherDelegate;@in
2017-07-06 11:14:40 889
原创 iOS Block 和 代理的 对比
在我的另一篇博客 频繁调用代理方法优化 中我们讲到 使用代理模式。这节我要使用block 来实现同样的效果但是可以发现 其中的 差别 和 优劣。这两种方式都广泛的应用于 apple 的框架中。构建类 EOCNetworkFetcher#import typedef void (^EOCNetworkFetcherCompletionHandler)(NSData *
2017-07-06 09:17:50 767 1
原创 iOS Block 介绍
前言 :Block 和GCD 是 iOS 多线程 编程的核心 ,它们是 一并引入的 ,Block 是一种可以在 C C++,Objective-C 当中使用的 语法闭包。开发者 可以将 代码像对象 一样传递。 令其在不同的 环境 下运行。还有一个很关键,就是 Block 在定义的范围内 可以访问到其中全部变量。 GCD 基于 dipatch queue .开发者将 线程排入队列中,由GCD 负
2017-07-05 19:55:01 271
原创 iOS 通过协议提供匿名对象
应用场景: 有时对象类型 并不重要,重要的是 对象有没有实现某些方法,在此情况下级可以使用 匿名类型 来表达这一概念。例子如下:#import @protocol EOCDatabaseConnection;@interface EOCDatabaseManager :NSObject+ (id)sharedInstance;
2017-07-05 01:10:28 1227
原创 iOS 中 Class-continuation 的使用
Objective-C 动态消息系统的工作方式 决定了 其 不可能实现真正的私有方法或者私有变量。 因为我们在运行时的时候都可以提取 出来。 但是 即使如此 ,我们最好只把确实需要对外公布的那部分内容公开,这种 不需要对外公布的 就使用 class-continuation 来实现。 笔者 总结有 四种场景下使用。尤其是在写 SDK 等情况下 一种 隐藏你不想被外部知道的类 二种情况: 使用 了O
2017-07-04 23:08:43 713
原创 iOS 分类增加属性
对于分类中 增加属性 我的建议是 如果是只读属性 那么可以在分类中使用 ,如果是可变属性 最好在 primary Class 中使用;不要在分类中使用。代码如下:创建类 EOCPerson 。增加分类 分类中有属性#import "EOCPerson.h"@interface EOCPerson (AddProperty)@property (nonato
2017-07-04 17:42:15 478
原创 iOS 分类 使用注意事项
分类的 使用 基于 Objective-C 高度的动态性 。应用场景:一: 大部分场景下我们 拓展一个 类的功能 并且 希望在用到的时候 秩序引入头文件 或者 直接放入预编译文件 就能使用。 例如: #import @interface NSArray (ToJSONString)- (NSString *)toJSONStri
2017-07-04 10:24:23 419
原创 iOS 代理模式频繁调用代理方法的优化
前言: 对于代理模式 的应用大家应该都很熟悉。比如: 发起一个网络请求对象 requester , requsester 的代理 设置成 某个特定的 controller ,如果 请求成功返回数据 controller 刷新页面 。如果请求失败又返回其他的 等等。而在 代理模式中 requseter 经常判断 它有没有设置代理 其次它的代理是否响应代理的方法。 因为有很多代理方法 是option
2017-07-03 16:56:23 2334
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人