- 博客(222)
- 问答 (2)
- 收藏
- 关注
原创 WKWebView替换UIWebView
1.引入头文件#import <WebKit/WebKit.h>2.先使用WKWebView基本方法写个例子,加载baidu页面,写法跟UIWebView类似- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. WKWebViewConfigu
2017-08-16 19:17:03 784 1
原创 tabar突起按钮点击
Edittabar突起按钮点击之前面试经常问到tabbar突出按钮该如何点击,只知道用Hittest来解决,但是到底该重写哪个view的hitTest方法我不确定。刚开始肯定想要的是tabBar,但是tabBar的本身没在点击区域,我以为压根不会走进tabBar的HitTest方法,必须在它的上一层寻找,也就是self.view,但是self.view重写又很麻烦,而且突起按钮
2017-08-02 13:12:24 787
转载 使用NSProxy和NSObject设计代理类的差异
转自:http://www.tanhao.me/code/160702.html/?utm_source=tuicool&utm_medium=referral如有侵犯,请来信oiken@qq.com经常发现在一些需要使用消息转发而创建代理类时, 不同的程序员都有着不同的使用方法, 有些采用继承于NSObject, 而有一些采用继承自NSProxy. 二者都是F
2017-07-28 17:23:44 420
转载 代码质量以及内存泄露排查总结
想体验一把 CentOS 系统玩一下命令行?试试腾讯云上实验室吧 https://cloud.tencent.com/developer/labs原文链接:http://www.jianshu.com/p/4e447f1d8ffa在几周的稳定性工作中, 我对现有内涵iOS代码进行了一次初步的review过程,主要是针对一些非必现性crash的审查。 —— 由Moon同学分享
2017-07-28 16:13:57 1858
原创 将model转化为字典
将model转化为字典 刚入行时就见过项目里有mode转化为字典的代码,后来用过MJExtension的第三方库,非常好用,其实原理就是利用runtime遍历所有属性值,然后进行转化。但是自己从来没有动手写过~~~今天亲自写一写1.先用runtime遍历所有属性值代码如下:- (NSDictionary *)dicFromObject:(NSObject *)object { NSMuta
2017-07-26 17:45:57 9279 1
转载 使用appscript+python来控制Mac下的GUI应用程序
在Mac下,appscript是一个与应用程序通信交互的强大工具。用Python的appscript模块,可以在不用学习appscript的情况下也能做到与很多应用程序交互的功能。 打开Mac的终端,安装很简单: sudo easy_install appscript 然后运行ipython,先来试一个简单有趣的例子: Python代码 >>
2017-07-14 15:28:18 8838
转载 python 编码问题:'ascii' codec can't encode characters in position 的解决方案
报错:'ascii' codec can't encode characters in position 8-50: ordinal not in range(128)Python在安装时,默认的编码是ascii,当程序中出现非ascii编码时,python的处理常常会报这样的错UnicodeDecodeError: 'ascii' codec can't decode byt
2017-06-21 10:56:37 729
转载 优先级反转
什么是优先级反转? 优先级反转是指一个低优先级的任务持有一个被高优先级任务所需要的共享资源。高优先任务由于因资源缺乏而处于受阻状态,一直等到低优先级任务释放资源为止。而低优先级获得的CPU时间少,如果此时有优先级处于两者之间的任务,并且不需要那个共享资源,则该中优先级的任务反而超过这两个任务而获得CPU时间。如果高优先级等待资源时不是阻塞等待,而是忙循环,则可能永远无法获得资源,因为此时
2017-05-17 18:05:57 289
转载 iOS调试之Reveal插件-RevealLoader
要使用RevealLoader,必须要越狱设备才行。打开Cydia,搜索栏搜索RevealLoader。如图,点击RevealLoader即可,然后点击继续,接下来就等着安装机可以了。(不过在ipad上我试了试不行,能安装上,但列表是空的)3.pic.jpg安装完后打开系统的设置,如图找到Reveal这一选项。进去之后点击Enabled Applications
2017-05-14 15:36:56 1787
转载 iOS陷阱--NSDateFormatter的线程安全性
经常需要将NSDate和NSString进行互转,一般我们会这么写:NSDate转NSStringNSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];[dateFormatter setDateFormat:@”yyyy-MM-dd’T’HH:mm:ss”];[dateFormatter setTime
2017-04-15 16:36:38 1438
转载 iOS 开发中的八种锁(Lock)
锁之前的性能的图表:lock_benchmark.png发现除了@synchronized 用过,其他的都陌生的很,可以说完全不知道啥玩意儿~于是怀着惭愧的心情赶紧把这些锁学习了下,废话不多说,我们开始:锁 是什么意思?我们在使用多线程的时候多个线程可能会访问同一块资源,这样就很容易引发数据错乱和数据安全等问题,这时候就需要我们保证每次只有一个线
2017-04-15 16:21:04 359
转载 不再安全的 OSSpinLock
昨天有位开发者在 Github 上给我提了一个 issue ,里面指出 OSSpinLock 在新版 iOS 中已经不能再保证安全了,并提供了几个相关资料的链接。我仔细查了一下相关资料,确认了这个让人不爽的问题。OSSpinLock 的问题2015-12-14 那天, swift-dev 邮件列表里 有人在讨论 weak 属性的线程安全问题,其中有几位苹果工程师透露了自旋锁的问题,
2017-04-15 16:15:10 921
转载 Xcode8 安装XcodeColors插件与CocoaLumberjack工具
工欲善其事必先利其器,好的开发者一定是懂得利用工具来提高自己的效率的,Xcode有很多第三方插件可以使用,最近发现一个可以给控制台着色的工具XcodeColors,结合CocoaLumberjack一起使用可以让控制台有选择的输出信息,可以把输出到控制台的信息分为多种类型,在不同场景下输出不同的信息下面记录一下如何使用XcodeColors / CocoaLumberjack 和过程中遇到
2017-04-15 11:37:06 3416 1
原创 移动开发中MVC模式和分层
MVC在界面开发中被奉为设计的典范,在移动开发中也是MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写。它将业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。我刚接触iOS,想通过ios的一些实例设计来理解MV
2017-03-20 09:49:59 531
转载 iOS组件化思路
一、大神博客研读随着应用需求逐步迭代,应用的代码体积将会越来越大,为了更好的管理应用工程,我们开始借助CocoaPods版本管理工具对原有应用工程进行拆分。但是仅仅完成代码拆分还不足以解决业务之间的代码耦合,为了更好的让拆分出去的业务工程能够独立运行,必须进行组件拆分并且实现组件服务化。下面是最近在行业内几个大神的博客辩论对战,具体资料如下:2016.03.10 蘑菇街App的
2017-03-18 20:42:39 373
转载 iOS网络优化
(1)博客a,阿里无线11.11:手机淘宝 521 性能优化项目揭秘 阿里无线11.11:手机淘宝移动端接入网关基础架构演进之路b,携程App的网络性能优化实践c, charles使用简介d, 无线性能优化:域名收敛的过程e, App域名劫持之DNS高可用 - 开源版HttpDNS方案详解(2)原因分析a, 服务器处理时间慢,比如读取数据库等
2017-03-18 20:41:34 847
转载 iOS封装功能生成 .framework
前言 如果你想将你开发的控件与别人分享,一种方法是直接提供源代码文件。然而,这种方法并不是很优雅。它会暴露所有的实现细节,而这些实现你可能并不想开源出来。此外,开发者也可能并不想看到你的所有代码,因为他们可能仅仅希望将你的这份漂亮代码的一部分植入自己的应用中。 另一种方法是将你的代码编译成静态库(library),让其他开发者添加到自己的项目中。然而,这需要你一
2017-03-18 20:40:43 436
转载 【iOS app加密】iOS app之游戏加密防破解
【iOS app加密】iOS app之游戏加密防破解。iOS app游戏类应用有一个很泛滥但被视为鸡肋的问题,那就是iOS app被破解的问题。因为国内大多数游戏靠内购和广告盈利,游戏安装包也只是在早期象征性的收费,之后就会免费,所以很多开发者对iOS app游戏从只能在购买者设备安装变成可免费到处安装并不关注。 App游戏被破解攻击可能是宿命,正所谓,哪里有游戏,哪里就有
2017-03-18 20:35:57 1784
转载 iOS 并发编程之 Operation Queues
现如今移动设备也早已经进入了多核心 CPU 时代,并且随着时间的推移,CPU 的核心数只会增加不会减少。而作为软件开发者,我们需要做的就是尽可能地提高应用的并发性,来充分利用这些多核心 CPU 的性能。在 iOS 开发中,我们主要可以通过 Operation Queues、Dispatch Queues 和 Dispatch Sources 来提高应用的并发性。本文将主要介绍 Oper
2017-03-18 20:32:39 616
转载 GCD小结
0. Brief Introduction GCD,全称Grand Central Dispath,是苹果开发的一种支持并行操作的机制。它的主要部件是一个FIFO队列和一个线程池,前者用来添加任务,后者用来执行任务。 GCD中的FIFO队列称为dispatch queue,它可以保证先进来的任务先得到执行(但不保证一定先执行结束)。 通过与线程池的配
2017-03-18 20:31:25 422
转载 iOS中的gzip解压
最近做的一个东西中,需要从网络获取xml文件,但是该文件用了gzip压缩的。搜索一 下有人说gzip压缩的用urlrequest可以自己解压,但是这必须从服务器返回的header中有accept-Encoding说明是gzip 的。也就是用这句就可以实现自解压:[urlRequest addValue:@"gzip" forHTTPHeaderField:@"Accept-Encodi
2017-03-18 20:29:29 1762
转载 iOS GPUImage 的使用
GPUImage是现在做滤镜最主流的开源框架,没有之一。作者BradLarson基于openGL对图片处理单元进行封装,提供出GPUImageFilter基类,配合shader,常用滤镜都拿下不是问题。一、安装(1):首先下载GPUImage https://github.com/BradLarson/GPUImage (2):解压后,在framework
2017-03-18 20:28:36 262
转载 iOS-私有API与runtime
序有朋友在做类似iTool的功能,跟我聊起来,这几天闲,就写了一个demo,不是正经做这个,还很粗略,具体干货诸位等这位朋友自己发文吧。DEMOhttps://github.com/liulishuo/testAppList思路iOS9白名单的上限是50个,如果想绕过这个限制,扫描系统中所有app的状态,只有使用私有API,需要用到的类有两个:LSApplicationWo
2017-03-18 20:27:16 360
转载 让编译器对一些警告闭嘴
慢慢搜集一些编译器告警的熄灭方法。1.方法弃用告警[objc] view plain copy #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" [TestFlight
2017-03-18 20:25:34 591
转载 让编译器对一些警告闭嘴
慢慢搜集一些编译器告警的熄灭方法。1.方法弃用告警[objc] view plain copy#pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" [TestFlight
2017-03-18 20:24:36 303
转载 Injection for Xcode:成吨的提高开发效率
今天强烈推荐一个Xcode高端必备插件:Injection Plugin for Xcode直接放demo演示动图:我很久以前就希望有这么一种功能,直接修改某行代码,F5一下就能刷新这个实例,而不用重写build整个项目。靠夭,我不是在说前端!没想居然有一天,梦想照入现实!!!是的,就是它,不用重新启动应用就可以让修改的代码生效。使用超级简单:修改源
2017-03-18 20:23:48 221
转载 并发编程—OSAtomic原子操作
并发编程一个主要问题就是如何同步数据。同步数据的方式有很多种,这里我们介绍一下libkern/OSAtomic.h。这个头文件包含是大量关于原子操作和同步操作的函数,如果要对数据进行同步操作,这里面的函数可以作为我们的首选项。不同平台这些函数的实现是自定义的。另外,它们是线程安全的。需要注意的是,传递给这些函数的所有地址都必须是“自然对齐”的,例如int32_t * 指针必须是32位对
2017-03-18 20:22:42 963
转载 JSPatch热修复简单使用
前言一说到热修复,可能很多人会觉得应该很复杂,很难用(我以前是这么觉得的。。。),然后最近入职的公司的项目,刚上线就发现了重大bug,然后提新版,然后审核,用了差不多4天的时间,这确实很耽误事的,然后就决定研究下热修复的使用,为以后的突发bug做好准备,实际发现,使用起来蛮简单的,这里以一个小demo演示热修复是如何修复崩溃的,具体更深入的用法,可以看这个https://github.co
2017-03-18 20:19:08 247
转载 iOS 离屏渲染的研究
GPU渲染机制:CPU 计算好显示内容提交到 GPU,GPU 渲染完成后将渲染结果放入帧缓冲区,随后视频控制器会按照 VSync 信号逐行读取帧缓冲区的数据,经过可能的数模转换传递给显示器显示。GPU屏幕渲染有以下两种方式:On-Screen Rendering意为当前屏幕渲染,指的是GPU的渲染操作是在当前用于显示的屏幕缓冲区中进行。Off-Screen
2017-03-18 20:16:31 218
转载 什么是硬件加速?GPU
iOS性能优化分析首先要熟悉几个概念PNG 和 JPG 的区别是什么?png格式的图片有alpha通道,jpeg则没有。png无损压缩,jpeg允许你选择0-100%的压缩质量。如果需要alpha通道(透明),就只能用png格式.CPU 和 GPU如果想看看两者的区别,先得了解iOS视图背后的层级结构原理 上图中的最底下一行是硬件层,由GPU和CPU组成。 我们经常说到的
2017-03-18 20:14:45 1436
转载 CoreText(图文混排)详解+Demo
写这篇文章之前,在网上找了不少资料,也看了不少大牛们的文章;在这结合我自己对CoreText的理解,今晚整理出来分享给爱学习的你们,因为CoreText比较复杂所以需要用大量文字来讲解,最后有Demo。一、CoreText简介 CoreText是用于处理文字和字体的底层技术。它直接和Core Graphics(又被称为Quartz)打交道。Quart是一个2D图形渲染引擎,能够处理
2017-03-18 20:13:19 757
转载 CoreData(数据库升级 )版本迁移-iOS App升级安装
如果IOS App 使用到CoreData,并且在上一个版本上有数据库更新(新增表、字段等操作),那在覆盖安装程序时就要进行CoreData数据库的迁移,具体操作如下:1.选中你的mydata.xcdatamodeld文件,选择菜单editor->Add Model Version 比如取名:mydata2.xcdatamodel2.设置当前版本 选择上级mydat
2017-03-18 20:12:23 323
转载 iOS开发 Coretext基本用法
CSDN博 API接口文档。https://developer.apple.com/library/mac/#documentation/Carbon/Reference/CoreText_Framework_Ref/_index.html CoreText 框架中最常用的几个类:
2017-03-18 20:10:40 252
转载 iOS app性能优化的那些事 - 树下的老男孩 - 简书
iPhone上面的应用一直都是以流畅的操作体验而著称,但是由于之前开发人员把注意力更多的放在开发功能上面,比较少去考虑性能的问题,可能这其中涉及到objective-c,c++跟lua,优化起来相对复杂一些,导致应用在比如touch等较低端的产品上,光从启动到进入页面就花了将近一分钟的时间,页面之间的切换没有那种很流畅的感觉,内存也居高不下,比较影响应用的用户体验,所以很有必要进行一些优化,下面记
2017-03-18 20:07:01 287
原创 QLPreviewController 预览文件
发现了一个有意思的framewokr:quick look.大概可以展示:图片,office, pdf等文件。文件可以通过网络下载到app内,也可以初始化放在项目里。如果放在项目里,一定要在copy bundle resources那拖进去,否则读取不到!ag1.首先要写一个实现QLPreviewItem协议的类:MyItem,只要实现两个属性就可以,代码如下:#imp
2017-03-04 20:55:07 1131
转载 GCD 之任务操作(Dispatch Block)
在向队列中添加任务时,可以直接在对应的函数中添加 block。但是如果想对任务进行操作,比如监听任务、取消任务,就需要获取对应的 block。创建blockobject-c创建 block 有两种方式,第一种方式如下: dispatch_block_t dispatch_block_create(dispatch_block_flags_t flags, disp
2017-03-01 13:38:01 562
原创 dispatch_async_f 详解
之前面试的时候被问过一个问题:你知道dispatch_async_f 吗?我一脸蒙比,问题好变态,太偏了吧,见过但是没用过,不知道干啥的。。今天一时兴起,想了解一下,下面是参数的官方文档:context: The application-defined context parameter to pass to the function. work: The appl
2017-03-01 13:03:38 2698
原创 CADisplayLink
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib.// _scrollView = [UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self
2017-02-24 15:09:27 322
原创 image scale和size的关系与SDScaledImageForKey
之前总是理解不了scale和size的关系,只知道图片一般给三张b.png, b@2x.png, b@3x.png。对应不同的手机,iphone6以下的retain屏都是@2x, plus用的是@3x。如:120*120的图片 1x的size(120*120) 2x的size(60*60) 3x的size(40*40)其实size才是开发中参考
2017-02-21 23:37:01 1212
转载 利用layer的FillRule属性生成一个空心的layer
-(void)testHoleRect{ UIView* aView = [[UIViewalloc] initWithFrame:CGRectMake(100,80, 100, 100)]; [self.viewaddSubview:aView]; //用来标识layer的绘图是否正确 aView.layer.borderWidth =1.0;
2016-12-16 13:09:22 350
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人