- 博客(77)
- 资源 (8)
- 收藏
- 关注
转载 iOS开发-Runtime详解(简书)(好文章)
简介Runtime 又叫运行时,是一套底层的 C 语言 API,其为 iOS 内部的核心之一,我们平时编写的 OC 代码,底层都是基于它来实现的。比如:[receiver message];// 底层运行时会被编译器转化为:objc_msgSend(receiver, selector)// 如果其还有参数比如:[receiver message:(id)arg...];// 底
2016-11-01 11:04:26 1086
转载 使用 iOS 8 Spring Animation API 创建动画
在iOS9 中,如果进行animateWithDuration 时,view被release 那么会引起crash。[UIView animateWithDuration:0.25f animations:^{ self.frame = selfFrame; } completion:^(BOOL finished) { if (finished
2016-09-26 18:38:08 369
转载 iOS实时卡顿监控
在移动设备上开发软件,性能一直是我们最为关心的话题之一,我们作为程序员除了需要努力提高代码质量之外,及时发现和监控软件中那些造成性能低下的”罪魁祸首”也是我们神圣的职责.众所周知,iOS平台因为UIKit本身的特性,需要将所有的UI操作都放在主线程执行,所以也造成不少程序员都习惯将一些线程安全性不确定的逻辑,以及其它线程结束后的汇总工作等等放到了主线,所以主线程中包含的这些大量计算、IO、绘制
2016-09-22 10:57:44 548
转载 iOS 启动连续闪退保护方案
引言“如果某个实体表现出以下任何一种特性,它就具备自主性:自我修复、自我保护、自我维护、对目标的自我控制、自我改进。” —— 凯文·凯利 iOS App 有时可能遇到启动必 crash 的绝境:每次打开 App 都闪退,无法正常使用App。为了尝试解决这个问题,微信读书开发了 iOS 连续闪退保护工具:GYBootingProtection,检测连续闪退,在连续闪退出现时,尝试
2016-08-18 18:14:06 725
原创 性能优化总结之一
1.首先,图片本身有 3 种常见的编码方式: 第一种是 baseline,即逐行扫描。默认情况下,JPEG、PNG、GIF 都是这种保存方式。第二种是 interlaced,即隔行扫描。PNG 和 GIF 在保存时可以选择这种格式。第三种是 progressive,即渐进式。JPEG 在保存时可以选择这种方式。在下载图片时,首先用 CGImageSource
2016-08-18 18:06:44 500
转载 书架卡顿问题引发的显示类知识梳理&性能检测
1. 问题描述百度阅读 iOS 版书架在宫格、列表模式下进行快速滑动均感觉到明显卡顿,当书架中全部为图书\小说时滑动较流畅,但生成文件夹后卡顿加强。2. iOS 显示原理Vsync是什么?CPU\GPU协同方式?V-Sync 机制是什么?双缓冲工作原理?垂直同步工作原理?掉帧卡顿是如何产生的?避免复制粘贴,上面的这些问题可以从下面这篇文章找到答案:ibireme:如何让
2016-06-12 18:24:24 1574
转载 Objective-C Associated Objects 的实现原理
我们知道,在 Objective-C 中可以通过 Category 给一个现有的类添加属性,但是却不能添加实例变量,这似乎成为了 Objective-C 的一个明显短板。然而值得庆幸的是,我们可以通过 Associated Objects 来弥补这一不足。本文将结合runtime 源码深入探究 Objective-C 中 Associated Objects 的实现原理。在阅读本文
2016-04-20 16:21:15 232
转载 iOS 视图,动画渲染机制探究
在第一和第二部分,我们了解了Core Animation提供的关于绘制和动画的一些特性。Core Animation功能和性能都非常强大,但如果你对背后的原理不清楚的话也会降低效率。让它达到最优的状态是一门艺术。在这章中,我们将探究一些动画运行慢的原因,以及如何去修复这些问题。CPU VS GPU关于绘图和动画有两种处理的方式:CPU(中央处理器)和GPU(图形处理器)。在现代iOS设备中
2016-03-07 15:41:45 958
转载 ios runtime之深入浅出 Cocoa 消息
在入门级别的ObjC 教程中,我们常对从C++或Java 或其他面向对象语言转过来的程序员说,ObjC 中的方法调用(ObjC中的术语为消息)跟其他语言中的方法调用差不多,只是形式有些不同而已。 譬如C++ 中的:Bird * aBird = new Bird();aBird->fly(); 在ObjC 中则如下:Bird
2016-01-25 15:19:28 619
原创 IOS使用Jenkins进行持续集成
前提:jenkins之所以能自动打包是因为xcode带有xcodebuild 和xcrun这两个插件命令。1.下载安装jenkins mac 下用homebrew下载最方便 brew install jenkins (没有homebrew的请安装,可用brew --version 来查看是那个版本和是否已经安装)。2.启动jenkins ,网上的资料都是 java -jar jen
2016-01-04 19:57:26 587
转载 Launch Arguments & Environment Variables
Walk into any American fast food establishment, and you’ll be greeted with a colorful, back-lit display of specials, set menus, and other a la carte items. But as those in-the-know are quick to point
2015-12-30 16:09:31 482
转载 iOS开发,入门级ReactiveCocoa教程(二)
ddReactiveCocoa是一个框架,它能让你在iOS应用中使用函数响应式编程(FRP)技术。在本系列教程的第一部分中,你学到了如何将标准的动作与事件处理逻辑替换为发送事件流的信号。你还学到了如何转换、分割和聚合这些信号。 在本系列教程的第二部分,你将会学到一些ReactiveCocoa的高级功能,包括:•另外两个事件类型:error 和 completed
2015-12-27 12:28:10 347
转载 ReactiveCocoa入门教程:第一部分
作为一个iOS开发者,你写的每一行代码几乎都是在相应某个事件,例如按钮的点击,收到网络消息,属性的变化(通过KVO)或者用户位置的变化(通过CoreLocation)。但是这些事件都用不同的方式来处理,比如action、delegate、KVO、callback等。ReactiveCocoa为事件定义了一个标准接口,从而可以使用一些基本工具来更容易的连接、过滤和组合。如果你对上面说的还比较
2015-12-27 12:26:33 578
原创 svn命令下合并分支到主干上教程
1.编写此教程的来由,由于新公司代码管理不是用git,所以只能用蛋疼的SVN了(不可否认git就是多人开发的首选),因为不可能叫领导:"你赶紧给我换git管理,还用SVN",但是这个也只能咱们自己在心里想想就好了。SVN就SVN吧,但是网上管理SVN的分支合并也不知道为什么那么多的雷同,雷同就雷同吧,还一个都是不能用的,也不知道编写者自己是否实验过,反之我是用不了。鉴于此种情况,我想应该把成果分享
2015-12-16 12:30:06 2042
转载 iOS 保持界面流畅的技巧(好文章)
点多这篇文章会非常详细的分析 iOS 界面构建中的各种性能问题以及对应的解决思路,同时给出一个开源的微博列表实现,通过实际的代码展示如何构建流畅的交互。Index演示项目屏幕显示图像的原理卡顿产生的原因和解决方案CPU 资源消耗原因和解决方案GPU 资源消耗原因和解决方案AsyncDisplayKitASDK 的由来ASDK 的资料ASDK 的基
2015-11-15 22:30:42 580
转载 xcodebuild和xcrun的打包
通过一翻搜索和学习,打包这事儿就是让xcrun来干,而xcodebuild只是xrun的一个软链接,但是这一链却有了不同的分工:xcodebuild负责将工程源文件编译成xxx.appxcrun负责给xxx.app(签名并)打包成xxx.ipa先说我是咋干的。第一步清理:/usr/bin/xcodebuild -target targetName clean
2015-11-15 21:59:00 1488
转载 iOS应用架构分享及讨论
源自一篇文章http://casatwy.com/iosying-yong-jia-gou-tan-kai-pian.html,该文章是一系列的,大家可以多看几遍以及看看评论,受益匪浅
2015-10-09 12:00:20 306
转载 Mac上的抓包工具Charles
今天就来看一下Mac上如何进行抓包,之前有一篇文章介绍了使用Fidder进行抓包http://blog.csdn.net/jiangwei0910410003/article/details/19806999不过可惜的是,Fidder使用C#开发的,所以就不能在Mac上使用了,不过还有另外一个抓包神器,就是Charles,它是Java开发的,所以跨平台,不仅可以在Mac上使用,
2015-08-22 09:31:26 417
转载 How to get md5 and SHA1 in objective c (iOS sdk)
Calculating the md5 and sha1 hash in iOS sdk is pretty simple -Step 1 – The very first thing you need to do is import CommonCrypto’s CommonDigest.h#import Step 2 – Here is the real code for cal
2015-08-18 11:21:39 571
转载 KVO底层实现原理
KVO是实现Cocoa Bindings的基础,它提供了一种方法,当某个属性改变时,相对的objects会被通知到。在其他语言中,这种观察者模式通常需要单独实现,而在Objective-C中,通常无须增加额外代码即可使用,这是怎么实现的呢?其实就是通过OC强大的运行时(runtime)实现的。当你第一次观察某个对象时,runtime会创建一个新的继承原先class的subclass。在这个新的
2015-07-21 15:49:03 585
转载 GCD研究
d深入理解 GCD(一)GCD 深入理解:第二部分GCD是基于c的底层api,NSOperation属于object-c类。ios 首先引入的是NSOperation,IOS4之后引入了GCD和NSOperationQueue并且其内部是用gcd实现的。NSOperation:1,NSOperation拥有更多的函数可用,具体查看api。2,在NSOpe
2015-07-21 15:23:48 359
转载 如何更安全的使用Block
前段时间,在公司的项目中发现了内存泄露。查到最后发现是由于没有正确使用Block导致的内存引用循环。简单的解决方案就是补上关键字__weak。那么问题来了,为何[UIView animateWithDuration:animations:completion:]或者GCD中可以不需要声明__weak呢?如何选择回调方式在讲这个问题之前,我们先看看Objcio上是怎么判断使用何种回调
2015-07-17 10:11:05 257
转载 IOS面经系列(二)什么是id ,为什么要用id,在哪用id
谁能告诉我以下这三种声明的区别? 1. id b1; 2. NSObject *b2; 3. id b3;第一种,id类型是运行时的动态类型,仅声明了指向对象的指针,没给编译器任何类型信息,因此,编译器不会做类型检查。由于编译器无法知道它的真实类型,即使你发送一个id类型没有的方法,也不会产生编译警告。因此你可以发送任何信息给id类型的对象(但很危险)。
2015-07-15 22:51:45 557
转载 Objective-C 中 +load 与 +initialize
类的加载在java语言里,可以通过如下代码来实现加载类的时候执行对类的操作,一般叫:类初始块,或者,类加载块。比如: Java代码 public class MyClass{ static{ …… } } 在objc语言里,对应的机制是,2个类初始化方法,+(void)load和+(void)i
2015-06-16 13:56:42 221
转载 viewDidUnload和dealloc的执行时机
一直对这个没有什么问题,反正就是疯狂的release。但今天发现原来模拟器可以模拟内存不足时的情况,这使我的程序发生了一些错误,同时也让我对这两家伙了解更多。viewDidUnload 这个只在内存不足时执行,而且是对所有非当前显示的controller执行。你可以通过模拟器执行:硬件》模拟内存警告 来触发。 当己经执行 viewDidUnload的controller重新显示
2015-04-28 11:09:52 304
转载 appstore中关于idfa的选项都是什么意思
最近,好多同学向我们反映,使用了umtrack产品,在appstore提交应用时,审核会被拒。关于这个问题,我想,需要详细地给大家说一说,以便提升大家提交应用的效率。首先,说下umtrack会采集的信息。umtrack会采集用户的idfa、idfv、mac以及ip等信息。那么问题来了,如果你的应用中,没有集成广告,而你又不太清楚这一点的话,你可能会在提交应用时,选择自己的应用未采集
2015-04-05 16:33:24 823
转载 ios中摄像头/相册获取图片,压缩图片,上传服务器方法总结
iphone中图像通常存储在4个地方【相册、应用程序包、沙盒、Internet】,通过这4个源,我们就可以存取应用图片。 相册 iphone的相册包含摄像头胶卷+用户计算机同步的部分照片。用户可以通过UIImagePickerController类提供的交互对话框来从相册中选择图像。但是,注意:相册中的图片机器路径无法直接从应用程序访问,只能通过终端用户去选择和使用相册图片 应用
2015-03-17 18:50:34 327
转载 25条提高iOS App性能的建议和技巧
当我们开发iOS应用时,好的性能对我们的App来说是很重要的。你的用户也希望如此,但是如果你的app表现的反应迟钝或者很慢就会让你得到不好的评论。 然而,由于IOS设备的限制有时很难工作得很正确。我们开发时有很多需要我们记住这些容易忘记的决定对性能的影响。 这是为什么我写这篇文章的原因。这篇文章用备忘录的形式集合了25个技巧和诀窍可以用来提高你的app性能。所以耐心的阅
2015-03-17 18:36:45 358
转载 关于UITableView 设置contentsize
由于UITableView是继承自UIScrollView的,所以他是可以设置contentsize的。但是,我在试验的过程中,初始化UITableView实例后,直接设置它的contentsize是不起作用,在搜寻相关资料得知,UITableView会自动设置contentsize,因为我们在建立tableview的时候是不用自己去设置contentsize的,她是自己计算出来的。
2015-01-30 16:48:32 943 1
转载 iOS后台任务
根据苹果文档中关于后台执行的描述,任何app都有10分钟左右的后台任务执行时间。 10分钟后,app会被iOS强行挂起。但是,有5类app允许有“无限的”后台运行时间:1. Audio。2. Location/GPS。3. VoIP。4. Newsstand。5. Exernal Accessory 。你可以将任何app声明为上述5种类型以获得无限的后台运行时
2015-01-22 12:17:14 518
转载 iOS重绘机制drawRect
iOS的绘图操作是在UIView类的drawRect方法中完成的,所以如果我们要想在一个UIView中绘图,需要写一个扩展UIView 的类,并重写drawRect方法,在这里进行绘图操作,程序会自动调用此方法进行绘图。下面先说明一下绘图,比如,你想绘制一个方块,你需要写一个类来扩展UIView并在drawRect方法中填入如下代码:- (void)drawRect:(CGRect)r
2015-01-20 16:17:43 444
转载 iOS8 Core Location
DD当肾Phone出现,定位服务一直都是作为一个前沿技术跟中心存在。CL API在肾平台SDK第一次发布的时候就列入了公开接口。在每次新发布的iOS版本中,大苹果总是循序渐进的增加一些新功能到CL框架,比如后台定位,geocoding亦或是iBeacons。iOS8义无反顾往前走。更其他领域的最新更新一样,CL已经动摇了,随着新设计允许让开发去创建之前他们无法完成的新东西的同时还帮助保
2014-12-24 00:29:54 646
转载 ios 高德地图 通过索引输出经纬度 根据经纬度 定位
ios 高德地图 通过索引输出经纬度 根据经纬度 定位,有需要的朋友可以参考下。ios 高德地图新出了几个方法,实现地理位置的编码用到了CLGeocoder,CLGeocoder里面一共就下面这几种方法://根据location即经纬度输出具体地址- (void)reverseGeocodeLocation:(CLLocation *)location comple
2014-12-22 18:49:16 4010
转载 iOS地图上WGS84、GCJ-02、BD-09互转解决方案
近来开发的项目涉及地图位置分享模块,android组的同事先开工,用的是百度地图sdk,本人后面开工,用的是iOS SDK的mapkit做,之后问题来了,同一个经纬度坐标在iOS端和Android端出现了比较大偏差。查了下资料苹果地图在大陆的数据源是高德的,查了下高德采用GCJ-02, 百度map sdk 采用的是BD-09,只好写了个类在发送和接收时做好转换,略微蛋疼。Github上有人写了
2014-12-22 17:32:24 1884
转载 IOS开发之 ---- IOS8推送消息注册
iOS8拥有了全新的通知中心,有全新的通知机制。当屏幕顶部收到推送时只需要往下拉,就能看到快速操作界面,并不需要进入该应用才能操作。在锁屏界面,对于推送项目也可以快速处理。基本上就是让用户尽量在不离开当前页面的前提下处理推送信息,再次提高处理效率。 能够进行直接互动的短信、邮件、日历、提醒,第三方应用,可以让你不用进入程序就能进行快捷操作,并专注于手中正在做的事情。 在通知横
2014-12-18 17:26:34 392
转载 iOS 消息推送原理
得到APNS的推送机制与Android上我们自己实现的推送服务不一样,Apple对设备的控制非常严格,消息推送的流程必须要经过APNs:这里 Provider 是指某个应用的Developer,当然如果开发者使用AVOS Cloud的服务,把发送消息的请求委托给我们,那么这里的Provider就是AVOS Cloud的推送服务程序了。上图可以分为三步:第一步
2014-11-19 14:31:43 470
转载 iOS分辨率的那些事儿
ddd1 iOS设备的分辨率iOS设备,目前最主要的有3种(Apple TV等不在此讨论),按分辨率分为两类iPhone/iPod Touch普屏分辨率 320像素 x 480像素Retina分辨率 640像素 x 960像素iPad,iPad2/New iPad普屏 768像素 x 1024像素Retina屏 1536像素 x 204
2014-11-18 19:15:37 527
转载 在iOS开发中使用FMDB
http://blog.devtang.com/blog/2012/04/22/use-fmdb/SQLite (http://www.sqlite.org/docs.html) 是一个轻量级的关系数据库。iOS SDK很早就支持了SQLite,在使用时,只需要加入 libsqlite3.dylib 依赖以及引入 sqlite3.h 头文件即可。但是,原生的SQLite API在使用上
2014-11-18 15:24:33 426
转载 iOS UIWebView 自定义 UserAgent
我的需求是:用户使用我的浏览器浏览网页,服务器可以得到我的浏览器名称和版本号,站长工具能查看到客户端来源。OK,解决思路就是修改系统默认的用户代理UserAgent,这是没差的。曾经做过的App也有这样的需求,思路是在UIWebView 的 Request 的 Header 中设置UserAgent,最后证实这条思路是行不通的,后来由于时间问题,这个功能就放弃了。如今有个App又有这个需求,看
2014-11-18 11:14:42 622
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人