自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 收藏
  • 关注

原创 动态计算控件frame

动态计算控件frame在页面加载完毕时计算onLoad: function (options) { // 动态计算距离顶部高度 var that = this; var query = wx.createSelectorQuery() query.select('#affix').boundingClientRect() query.exec(funct...

2019-09-10 17:08:32 161

转载 沙盒缓存

IOS 沙盒与清除缓存,ios沙盒缓存SandBox,沙盒机制,是一种安全体系。我们所开发的每一个应用程序在设备上会有一个对应的沙盒文件夹,当前的程序只能在自己的沙盒文件夹中读取文件,不能访问其他应用程序的沙盒。在项目中添加的所有非代码的资源,比如图片、声音、属性列表等都存在自己的沙盒中。此外,在程序运行中动态生成的或者从网络获取的数据,如果要存储,也都是存储到沙盒中。沙盒中的默认文件夹(1)Doc

2016-01-02 01:40:06 538

原创 数据解析

在网络开发中, 从服务器获取的数据都为二进制形式的, 最常见的有JSON/XML, 我们需要对这些数据进行解析.序列化&反序列化反序列化:在从服务器接收到数据之后,将二进制数据转换成 NSArray / NSDictionary序列化:在向服务器发送数据之前,将 NSArray / NSDictionary 转换成二进制的过程JSON解析JSON语法规则数据以 key/value 值对表示

2016-01-01 21:57:08 423

原创 网络基本知识

学习网络, 首先要了解几个基本概念:客户端(Client):移动应用(iOS、android等应用)服务器(Server):为客户端提供服务、提供数据、提供资源的机器请求(Request):客户端向服务器索取数据的一种行为响应(Response):服务器对客户端的请求做出的反应,一般指返回数据给客户端URL URL统一资源定位符, 通过 1 个 URL,能找到互联网上唯一的 1 个资源

2016-01-01 17:36:07 453

原创 NSNull&nil&Nil&NULL

nil OC的, 空对象, 是地址指向空的对象; 在OC中, 可以给空对象发送任何消息, 不会出现错误;NULL C语言中的空地址, 相当于地址为0 Nil 表示一个空类 与nil空对象对应NSNull用于向字典或数组中插入空值; 如果我们插入nil, 程序运行时会崩溃; 如果插入[NSNull null], 这样运行时便不会崩溃 应用: 从网络上获取的数据我们无法

2015-12-30 16:12:05 356

原创 NSURLConnection

步骤NSURL:确定要访问的资源NSURLRequest:根据 URL 建立请求,向服务器索要数据NSURLConnection:建立网络连接,将请求(异步)发送给服务器// 发送请求[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(

2015-12-30 15:43:29 341

原创 第三方登录

主流第三方登录主要有两种方式: 1> OAuth2.0: 当前程序–>弹出网页–> 手动输入账号密码–>完成授权,手动获取 AccessToken–>可以获取用户数据 2> SSO 授权: 第三方应用程序–>点击授权–>可以获取用户数据 (模拟器不好使)这里主要讲SSO授权, 首先我们看一下SSO授权的优势: 1. 快捷方便(不用频繁输入账号密码, 还有可能用户输入错误) 2.

2015-12-29 14:44:57 428

原创 社交分享

如何实现社交分享?自己编写各个平台的分享代码(代码量较多)利用iOS自带的Social.framework利用第三方的分享框架Social.framework// 判断服务是否可用[SLComposeViewController isAvailableForServiceType:SLServiceTypeSinaWeibo]// 弹出分享内容输入界面SLComposeViewContr

2015-12-29 14:06:10 534

原创 视频

框架: MediaPlayer(已经过期)创建 NSString *path = [[NSBundle mainBundle]pathForResource:@"Alizee_La_Isla_Bonita.mp4" ofType:nil]; NSURL *url = [NSURL fileURLWithPath:path]; MPMoviePlayerController *pla

2015-12-29 13:08:45 511

原创 音乐播放器

新建一个音乐播放工具类EJMusicTool单例对象 + (instancetype)shareMusicTool{ static CZMusicTool *_INTENCE; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _INTENCE = [[EJMusicTool a

2015-12-29 11:58:03 382

原创 音频

音效播放框架: AVFoundation创建AudioServicesCreateSystemSoundID(CFURLRef inFileURL, SystemSoundID *outSystemSoundID)播放 AudioServicesPlaySystem(Alert)Sound(SystemSoundID inSystemSoundID)音乐播放框架: AVFoundatio

2015-12-29 02:28:07 340

原创 正则表达式和谓词

正则表达式需要匹配的字符串 str 匹配规则 pattern正则表达式NSRegularExpression *regularExpression = [NSRegularExpression regularExpressionWithPattern:pattern options:0 error:nil];匹配结果NSArray *resultarray= [regularExpre

2015-12-28 20:49:50 383

原创 大头针

系统大头针大头针基本操作// 添加一个大头针- (void)addAnnotation:(id <MKAnnotation>)annotation;// 添加多个大头针- (void)addAnnotations:(NSArray *)annotations;// 移除一个大头针- (void)removeAnnotation:(id <MKAnnotation>)annotation;//

2015-12-28 16:31:19 500

原创 苹果原生地图(下)

日常生活中我们经常会用到地图和导航, 这两个功能必须基于2个框架进行开发:MapKit :用于地图展示CoreLocation :用于地理定位MapKit几个重要属性 1.可以通过设置MKMapView的mapViewType设置地图类型MKMapTypeStandard :普通地图(左图)MKMapTypeSatellite :卫星云图 (中图)MKMapTypeHybrid :普

2015-12-28 15:43:02 392

原创 百度地图

在百度地图开放平台注册一个应用生成一个APPKey通过APPKey获取授权(在程序入口获取) -

2015-12-27 16:36:17 363

原创 苹果原生地图(上)

日常生活中我们经常会用到地图和导航, 这两个功能必须基于2个框架进行开发:Map Kit :用于地图展示Core Location :用于地理定位CLLocationManagerCLLocationManager的常用操作开始用户定位- (void)startUpdatingLocation;停止用户定位- (void) stopUpdatingLocation;当调用了startUpdat

2015-12-27 15:45:05 383

原创 支付宝集成

使用支付宝进行一个完整的支付功能,大致有以下步骤:向支付宝申请, 与支付宝签约,获得商户ID(partner)和账号ID(seller)下载相应的公钥私钥文件(加密签名用)// 由此获取三个参数NSString *partner = @"";NSString *seller = @"";NSString *privateKey = @"";下载支付宝SDK生成订单信息 商品描述/价

2015-12-27 14:49:44 361

原创 SDWebImage

SDWebImage 是非常著名的网络图片处理框架,目前国内超过 90% 公司都在使用!下面我们了解下其实现原理:框架结构设计SDWebImage框架通过传入一个URL字符串完成下载图片的整个过程;整体思路: ViewController将URLString传给UIImageView, UIImageView将URL传给下载管理器, 下载管理器将下载任务交给downloadImageOperatio

2015-12-27 12:04:21 263

原创 自定义NSOperation

通过上篇文章的学习我们知道, NSOperation系统自带的方法无论是取消还是挂起操作只能控制队列中的操作, 都无法操纵正在线程中运行的操作; 下面我们通过自定义NSOperation准备工作自定义 DownloadImageOperation 继承自 NSOperation代码调用// 实例化自定义操作DownloadImageOperation *op = [[DownloadImag

2015-12-27 02:59:08 312

原创 layoutSubviews

UIScrollView一般在 UIScrollView 中,只要一滚动,就会被调用,调用频率非常高 在 Cell 中,只要设置数据源,添加子控件,调整大小,点击…都会触发 layoutSubviews注意:此方法中,千万不要写非常复杂的代码UITabBar 如果重写layoutSubviews方法时不调用super会出现tabBar透明

2015-12-26 13:55:07 284

原创 图片加载

SDWebImage 是非常著名的网络图片处理框架,目前国内超过 90% 公司都在使用!今天我们在这里研究下其实现原理!图片在主线程下载–>网速慢, 会出现界面卡顿将下载放在子线程:NSBlockOperation *downloadOp = [NSBlockOperation blockOperationWithBlock:^{ // 1. 模拟延时 NSLog(@"正在下载

2015-12-26 13:32:48 437

原创 NSArray小知识

NSMutableArray *list = [NSMutableArray arrayWithCapacity:array.count];arrayWithCapacity 容量,指定数组容量,在实例化数组的同时,准备好容量指定的内容空间假如是10,一次性在内存中,准备10个空间,再添加元素的时候,就不会再次申请内存如果增加第11个元素,会直接再次开辟10个元素的空间NSMutableAr

2015-12-26 12:31:53 242

原创 NSOperation与GCD

NSOperation 抽象类 - NSInvocationOperation - NSBlockOperation NSOpeartionQueue * GCD 的核心概念:将任务(block)添加到队列,并且指定执行任务的函数 * OP 的核心概念:将`操作`添加到`队列`NSInvocationOperation(不常用)// 将操作添加到队列 - 会异步执行操作!- (v

2015-12-26 12:06:02 300

原创 本地推送

可以让不在前台运行的APP, 告知用户APP内部发送了什么事情; 简单来说就是程序不在线或程序在后台想要接收消息, 那么就要用到推送通知来实现 ;效果: - 在屏幕顶部显示一块横幅(QQ) - 在屏幕中间显示一个alertview(闹钟, 本地推送, 不需要网络) - 锁屏时也照样呈现 - 呈现推送通知的同时, 还可以更新APP图标数字 - 用户接受的推送通知, 都会展示在通知中心本地

2015-12-25 12:22:57 345

原创 产品迭代开发

当产品基础框架开发完成,进入成熟期后,产品的周期化迭代就变得非常重要。什么是产品迭代? 在一定时间内,对该产品一定量的新需求加以评估、筛选、开发、测试以及上线的一系列行为的总称。为什么要产品迭代 固定的周期有助于为项目团队形成规范,从而提高开发效率。注意事项 1> 划分好代码的架构和模块,每个功能模块拆分的粒度足够细; 这样可以减少模块之间的耦合度, 防止并行开发时出现相互代码干扰 2

2015-12-24 20:29:07 858

原创 运行时

很多人都喜欢研究底层的东西, 因个人比较low, 只能讲讲runtime在实际工作中的应用.应用1 动态获取类的属性// 获取成员变量列表, 第三方框架使用此方法居多// 参数1: 要copy的类// 参数2: 属性计数指针class_copyIvarList(__unsafe_unretained Class cls, unsigned int *outCount);// 获取方法列表

2015-12-24 02:47:45 336

原创 KVC/KVO

1、KVC简介 全称是Key-value coding,翻译成键值编码。顾名思义,在某种程度上跟map的关系匪浅。它提供了一种使用字符串而不是访问器方法去访问一个对象实例变量的机制。KVC的用法: 简单来说就是给对象的私有属性赋值. 常用到两个方法: // 层级结构较浅时使用 - (id)valueForKey:(NSString *)key; - (void)setVal

2015-12-24 00:33:04 429

原创 GCD调度组的使用

在一些社交应用比如微博配图时张数不确定, 如何动态调整图片的尺寸? GCD调度组可以解决我们的难题.下面代码统一监听A/B任务完成, 才执行更新UI- (void)group1 { dispatch_group_t group = dispatch_group_create(); dispatch_queue_t queue = dispatch_get_global_queue(0,

2015-12-22 12:15:48 690

原创 Barrier的使用

Barrier主要用于在多个异步操作完成之后,统一对非线程安全的对象进行更新, 如NSMutableString/NSMutableArray…Barrier的工作原理将所有之前添加的异步执行完成之后,在同一个线程中,顺序执行 block 中的代码接下来我们看一下它是如何实现的 ?首先创建一个并发队列_queue = dispatch_queue_create("ejParadise", D

2015-12-22 02:16:57 771

原创 GCD的死锁

GCD为多线程中的重点, 今天写了几个小demo分享一下 -J-给主线程添加同步任务- (void)demo1{ NSLog(@"哈哈哈"); // 此处给主线程添加同步任务 // 它会等主线程任务(demo1)执行完再执行 // 而同步任务按顺序执行,也就是说同步任务不执行demo1就无法结束 // 相互等待, 形成死锁 dispatch_syn

2015-12-22 01:05:22 518

原创 dispatch_get_current_queue的废弃

由于iOS7以后 dispatch_get_current_queue 被废弃 在主线程分离出一个子线程: - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ [NSThread detachNewThreadSelector:@selector(onPlay) toTarget:sel

2015-12-21 22:20:59 1300

原创 原生SQLite-数据库操作

基于SQLite自身的诸多优点, 在IOS开发中它是不二的选择; 除了会使用框架, 接下来我们来看一下原生SQLite是如何操作的.添加动态库 注意: xcode7 默认添加 libsqlite3.tbd, 这种tbd的方式只能用在IOS9.0的系统上,如果想用在7.0/8.0系统上, 这样导入的动态库是用不了的.接下来怎么办呢? 添加动态库选择add other–>(shift+comma

2015-12-20 22:13:01 614

原创 性能测试

对于移动端开发, 程序性能尤为重要; 因此我们经常会对自己的程序性能测试进而对代码进行优化.平时我们最常用的应该是:public func CACurrentMediaTime() -> CFTimeInterval这里我介绍另一个API:Public func CFAbsoluteTimeGetCurrent() -> CFAbsoluteTime二者有什么区别呢?CFAbsoluteTimeGe

2015-12-20 20:05:11 365

原创 透明字体如何设置?

有时会在一些APP上看到透明字体, 感觉非常漂亮, 那么透明字体如何设置呢?思路: 能显示字体, 当然是用label, 那么接下来我们自定义label–> EJLabel, 使用drawRect方法将透明字体画上去:- (void)drawRect:(CGRect)rect{ CGContextRef ctx = UIGraphicsGetCurrentContext(); CGRec

2015-12-20 19:47:49 2599

原创 如何修改系统控件

多数情况下, 系统原生控件太丑, 无法满足我们的需求. 那么系统控件如何修改呢? 思路: 找到你所需要更改的内容使用KVC赋值需求: 更改badgeValue的系统背景图片查看视图层级结构, 找到其View对应的位置 那么接下来我们的任务是一层一层剥开它的心取出要更改的控件for tabBarChild in (self.tabBarController?.tabBar.subviews

2015-12-19 16:42:52 524

原创 AFN封装

对于做开发的人来说, AFN可谓是家喻户晓. 基本上每个控制器界面都会都会涉及到网络请求, 由此可见AFN在我们开发中的重要性以及我们对AFN框架的依赖性; 之前接触过ASI的朋友应该是深有体会, 当ASI不再更新被废弃的时候, 对于程序员来说真的是晴天霹雳; 以及框架更新后程序不能正常运行, 怎么办? 这就体现了对框架封装的重要性.思路: OC版新建一个类EJNetworkTool继承自AFH

2015-12-19 14:37:10 631

原创 高清图片上传内存问题解决

没有图片的APP在市面上比较少见,因此在程序开发中关于图片上传的内存问题不得不成为我们关注的焦点. 当遇到高清图片, 如果不对图片进行处理, 一则APP内存暴涨, 二则消耗用户流量过多, 降低用户体验.图片处理有两种方式:调整图片质量 (不常用)public func UIImageJPEGRepresentation(image: UIImage, _ compressionQu

2015-12-19 11:14:16 650

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除