Object-C
文章平均质量分 55
Philm_iOS
这个作者很懒,什么都没留下…
展开
-
3Dtouch
iPhone 6S开始 屏幕支持3D Touch 支持的最低系统版本为iOS 9.使用3D Touch功能的可以在主界面添加应用的快捷入口. (Home Screen Quick Actions )这个功能是通过主屏幕的应用Icon,使用3D Touch呼出一个菜单,进行快速定位应用功能模块相关功能的开发。快捷标签最多可以创建四个,包括静态的和动态的。如果同时设定,会优先显示静态的.(...转载 2018-07-26 10:43:13 · 293 阅读 · 0 评论 -
NSLog效率低下的原因及尝试lldb断点打印Log
NSLog效率低下的原因及尝试lldb断点打印Log原文地址:http://blog.sunnyxx.com/2014/04/22/objc_dig_nslog/我是前言打Log是我们debug时最简单朴素的方法,NSLog对于objc开发就像printf对于c一样重要。但在使用NSLog打印大量Log,尤其是在游戏开发时(如每一帧都打印数据),NSLog会明显的拖慢程序的运行...转载 2018-08-22 10:56:38 · 284 阅读 · 0 评论 -
ObjC和JavaScript的交互,在恰当的时机注入对象
ObjC和JavaScript的交互,在恰当的时机注入对象原文地址: http://www.jianshu.com/p/2e53d87c826b* 警告:文章中提到的 *- (void)webView:(id)unuse didCreateJavaScriptContext:(JSContext *)ctx forFrame:(id)frame;方法涉及私有API,有网友反...转载 2018-08-22 11:00:06 · 371 阅读 · 0 评论 -
CADisplayLink
CADisplayLinkCADisplayLink是一个能让我们以和屏幕刷新率相同的频率将内容画到屏幕上的定时器。我们在应用中创建一个新的 CADisplayLink 对象,把它添加到一个runloop中,并给它提供一个 target 和selector 在屏幕刷新的时候调用。一但 CADisplayLink 以特定的模式注册到runloop之后,每当屏幕需要刷新的时候,runloop就...转载 2018-08-17 10:37:10 · 2089 阅读 · 0 评论 -
CAEmitterLayer属性介绍
在iOS 5中,苹果引入了一个新的CALayer子类叫做CAEmitterLayer。CAEmitterLayer是一个高性能的粒子引擎,被用来创建实时例子动画如:烟雾,火,雨等等这些效果.CAEmitterLayer 粒子发射器属性:emitterPosition:发射位置 CGPointemitterSize : 发射源的尺寸大小emitterMode:发射模式emit...原创 2018-08-17 10:38:07 · 411 阅读 · 0 评论 -
老生常谈category增加属性的几种操作
老生常谈category增加属性的几种操作原文地址: https://juejin.im/post/5a2963876fb9a0452207681d?utm_source=gold_browser_extension前言日常开发中,为一个已有的类(比如说不想影响其文件结构)、第三方库提供的类增加几个property,已经是十分常见且需要的操作了,有人会单独起草一份categor...原创 2018-08-17 10:39:11 · 679 阅读 · 0 评论 -
常用的几种延时调用简介
常用的几种延时调用简介iOS中的几种常用定时器,是否严格按照设定的时间间隔按时执行,支持的最小时间间隔NSTimer可以精确到50-100毫秒. 能满足对间隔要求不严格、对精确度不敏感的需求NSTimer理论上最小精度为 0.1 毫秒。不过由于受 Runloop 的影响,会有 50 ~ 100 毫秒的误差,所以,实际精度可以认为是 0.1 秒。不可靠,NSTimer不是...原创 2018-08-17 10:40:07 · 650 阅读 · 0 评论 -
YYImage显示指定区域的webP图片
YYImage 显示指定区域的webP图片YYImage 显示区域与图片大小不一致时,默认显示的是居中部分 如果想指定显示区域 需要重写YYImage以下代码为显示从1/8位置开始的图片#import "PLImage.h"@implementation PLImage- (CGRect)animatedImageContentsRectAtIndex:(NSUInteg...原创 2018-08-27 10:34:44 · 1487 阅读 · 0 评论 -
UIButton触发边界事件
UIButton触发边界事件时,事件并没有触发,而是到了远离button近70个像素时才收到回调。这是因为在UIButton周围会有70px的扩展范围。与边界有关的事件:UIControlEventTouchDragInsideUIControlEventTouchDragOutsideUIControlEventTouchDragEnterUIControlEventTouch...转载 2018-08-27 10:35:32 · 639 阅读 · 0 评论 -
scroll上的button延迟响应问题
UIButton在某些情况下不能立刻响应TouchDown事件,换句话说,迅速点击按钮时,你是永远看不见这个按钮的高亮状态的. 出现这种情况时,这些按钮都在UIScrollView的子类上.这是因为 scroll有一个属性delaysContentTouches,默认值为YES.值为YES时,UIScrollView会在接收到手势时延迟150ms来判断该手势是否能够出发UIScrollView的...原创 2018-08-27 10:36:16 · 744 阅读 · 0 评论 -
30行代码演示dispatch_once死锁
30行代码演示dispatch_once死锁如果你遇到了下面这样的崩溃,你可能也遇到了dispatch_once死锁。Thread 0 Crashed:0 libsystem_kernel.dylib 0x00000001917718e8 __ulock_wait + 81 libdispatch.dylib 0x00000...转载 2018-08-16 10:36:51 · 1049 阅读 · 1 评论 -
YYCache深入学习
简介YYCahce 是YYkit组件库中的一部分,YYCache提供了内存缓存,和持久性的硬盘缓存。一个合理缓存应该有的设计合理的增删改查接口高速缓存,提高常用缓存的返回性能和效率低速缓存,磁盘大文件缓存良好缓存限制策略高性能,线程安全基本设计思路YYCache 提供对外的整合接口,YYMemoryCache 提供内存存储缓存,通过lru算法进行处理,YYD...转载 2018-08-16 10:36:23 · 854 阅读 · 0 评论 -
为什么 Objective-C 对象存储在堆上而不是栈上
为什么 Objective-C 对象存储在堆上而不是栈上一、什么是栈对象和堆对象在Objective-C 中,对象通常是指一块有特定布局的连续内存区域。我们通常这样创建一个对象:NSObject *obj = [[NSObject alloc] init]; 这行代码创建了一个 NSObject 类型的指针 obj 和一个 NSObject 类型的对象,obj 指针存储在栈上,而...转载 2018-07-27 11:19:26 · 1708 阅读 · 0 评论 -
iOS11 API 更新整理
iOS11 API 更新整理王巍整理原文 https://onevcat.com/2017/06/ios-11-sdk/Core ML https://developer.apple.com/documentation/coreml简介: Core ML 所扮演的角色更多的是将已经训练好的模型转换为 iOS 可以理解的形式,并且将新的数据“喂给”模型,获取输出。抽象问题和创...转载 2018-07-31 10:25:48 · 2070 阅读 · 0 评论 -
iOS 中的 imageIO 与 image 解码
ImageIOImageIO对外开放的对象有CGImageSourceRef、CGImageDestinationRef,不对外开放的对象有CGImageMetadataRef。CoreGraphics中经常与imageIO打交道的对象有CGImageRef和CGDataProvider,接下来看看这五个对象在创建一个UIImage中担任了哪些角色。用TimeProfiler一步一步来...转载 2018-07-30 10:46:06 · 746 阅读 · 0 评论 -
介绍CGImageRef的基本概念及方法说明
介绍CGImageRef的基本概念及方法说明在IOS开发中,我们时常会用到裁剪图片,重绘图片等方法,CGImageRef(像素位图)便是我们经常会使用到的一个对象.CGImageRef是什么CGImageRef是定义在QuartzCore框架中的一个结构体指针,用C语言编写.在CGImage.h文件中,我们可以看到下面的定义:typedef struct CGImage *...转载 2018-07-30 10:46:29 · 3868 阅读 · 0 评论 -
基于runloop的线程保活、销毁与通信
基于runloop的线程保活、销毁与通信原文地址:http://www.jianshu.com/p/4d5b6fc33519首先看一段AF2.x经典代码:+ (NSThread *)networkRequestThread {static NSThread *_networkRequestThread = nil;static dispatch_once_t oncePredi...转载 2018-07-30 10:43:17 · 1680 阅读 · 0 评论 -
CAReplicatorLayer
CAReplicatorLayerCAReplicatorLayer 可以复制自己上面的子图层,一般用于图层倒影的实现。其属性有如下:instanceCount : 图层的复制个数preservesDepth :instanceDelay:后一个复制图层比前一个复制图层的动画延迟执行时间instanceRedOffset:复制图层的颜色在red方向上的偏移insta...转载 2018-07-27 11:25:12 · 360 阅读 · 0 评论 -
如何优雅的对UITableView进行解耦
原文地址:https://juejin.im/post/5aaf3eee51882510fd3f6c82?utm_source=gold_browser_extension 在本文之前笔者已经将相关代码开源到 GitHub 上并添加了 CocoaPods 的支持,欢迎大家下载查看:STDTableView,下面进入正题:首先说一下本篇文章的背景,公司的一个项目中需要用到一个动态编辑的表单页面...转载 2018-07-27 11:24:08 · 763 阅读 · 0 评论 -
iOS 11:WKWebView内容过滤规则详解
iOS 11:WKWebView内容过滤规则详解WKWebView中新增了一个功能,可以对WebView的内容添加一些自定义的过滤规则。这个功能原来在 Safari Extension 中被引入,从 11 开始同样适用于WKWebView。使用方法原理上就是提供一个 JSON 给 WebKit,这个 JSON 包括内容的触发规则(trigger)和对应的处理方式(action)...原创 2018-08-16 10:33:36 · 736 阅读 · 0 评论 -
iOS App间常用的五种通信方式
iOS App间常用的五种通信方式iOS系统是相对封闭的系统,App各自在各自的沙盒(sandbox)中运行,每个App都只能读取iPhone上iOS系统为该应用程序程序创建的文件夹AppData下的内容,不能随意跨越自己的沙盒去访问别的App沙盒中的内容。所以iOS 的系统中进行App间通信的方式也比较固定,常见的app间通信方式以及使用场景总结如下。1、URL Sche...转载 2018-08-16 10:34:16 · 504 阅读 · 0 评论 -
ios 11 上tableview 改动
ios 11 上tableview 改动1、 UIViewController的automaticallyAdjustsScrollViewInsets属性被废弃。需要使用UIScrollView的contentInsetAdjustmentBehavior来替代。 关于 contentInsetAdjustmentBehaviortypedef NS_ENUM(NSIntege...转载 2018-08-27 10:36:57 · 403 阅读 · 0 评论 -
避免同时点击多个button
有些时候屏幕上会出现多处的“button”可点击区域,这个时候我们需要做个处理,避免在同一个界面的时候同时点击多个button,从而造成不应有的问题。代码如下:1.在AppDelegate中添加 [[UIButton appearance] setExclusiveTouch:YES];2.button.exclusiveTouch = YES;建议使用第一种全局设置, 不用在每一个 ...原创 2018-08-27 10:37:27 · 1324 阅读 · 0 评论 -
UITableview偏移异常问题
UITableView在reloadData时,如果当前tableview的偏移处于末端,则系统会将其偏移置为最大偏移量,导致设置的contentOffset无效。解决方案:需要在reloadData之前记录刷新的临界值,在刷新之后对该临界偏移值进行相应的处理。...原创 2018-08-27 10:38:06 · 1351 阅读 · 0 评论 -
TOLL-FREE BRIDGING 和 UNMANAGED
TOLL-FREE BRIDGING 和 UNMANAGED有经验的读者看到这章的标题就能知道我们要谈论的是 Core Foundation。在 Swift 中对于 Core Foundation (以及其他一系列 Core 开头的框架) 在内存管理进行了一系列简化,大大降低了与这些 Core Foundation (以下简称 CF ) API 打交道的复杂程度。首先值得一提的是对于 ...转载 2018-08-28 10:37:56 · 325 阅读 · 0 评论 -
Xcode 7新的特性Lightweight Generics 轻量级泛型与__kindof修饰符
Xcode 7新的特性Lightweight Generics 轻量级泛型与__kindof修饰符Lightweight Generics 轻量级泛型,轻量是因为这是个纯编译器的语法支持(llvm 7.0),和 Nullability 一样,没有借助任何 objc runtime 的升级,也就是说,这个新语法在 Xcode 7 上可以使用且完全向下兼容(更低的 iOS 版本)带泛型...转载 2018-08-28 10:39:00 · 433 阅读 · 0 评论 -
取消延时执行之坑
启动3S延时执行有一份[self performSelector:@selector(didRuninCurrModel:) withObject:@(YES) afterDelay:3.0f];在做取消操作时有两个坑1,要在主线中执行取消2,需要注意的是参数的一致性否则取消不掉[NSObject cancelPreviousPerformRequestsWithTa...原创 2018-08-28 10:42:07 · 715 阅读 · 0 评论 -
ios7以前使用[uicolor xxxcolor]类方法创建的颜色类型为 UIDeviceCachedColorSpace
[UIColor WhiteColor]类方法获取的CGColorGetNumberOfComponents是2 而且打印出来的UIDeviceWhiteColorSpace只有两个数字RGBA彩色颜色测试获取的CGColorGetNumberOfComponents是4 而且打印出来的UIDeviceWhiteColorSpace只有四个数字结论:用[UICo...原创 2018-08-28 10:42:53 · 1124 阅读 · 0 评论 -
draw
绘制带阴影的字符串NSString 使用 drawAtPoint / drawInRect 设置NSShadowAttributeName阴影属性时,单独设置不好使,必须指定的属性搭配才好使。和这三个任一个都好使,NSVerticalGlyphFormAttributeName,NSObliquenessAttributeName,NSExpansionAttributeNameN...原创 2018-08-28 10:43:52 · 325 阅读 · 0 评论 -
xcode9下相册访问权限问题
iOS11下,苹果对相册的权限key做了调整,原来的 NSPhotoLibraryUsageDescription ,在iOS11之后,改成了 NSPhotoLibraryAddUsageDescription。需要在 info.plist 中 添加 key NSPhotoLibraryAddUsageDescription...原创 2018-08-28 10:44:09 · 1361 阅读 · 0 评论 -
iOS中的锁的介绍及使用
iOS中的锁的介绍及使用在平时的开发中经常使用到多线程,在使用多线程的过程中,难免会遇到资源竞争的问题,这时候怎样避免出现问题?线程安全是什么?当一个线程访问数据的时候,其他的线程不能对其进行访问,直到该线程访问完毕。简单来讲就是在同一时刻,对同一个数据操作的线程只有一个。只有确保了这样,才能使数据不会被其他线程影响。而线程不安全,则是在同一时刻可以有多个线程对该数据进行访问,从而...转载 2018-08-21 10:35:15 · 718 阅读 · 0 评论 -
iOS 11 新特性《Layout的新特性》
玩转iOS开发:iOS 11 新特性《Layout的新特性》原文地址:https://cainrun.github.io/15101116434794.html随着苹果爸爸越来越多尺寸的设备发布, 还有iOS设计的改变, 特别是在iOS 11之后, 比大更大的导航栏, 然后再滚动的时候可以改变大小等等操作. 但这些问题都不是什么问题, 就如同在WWDC 2017一样, 苹果爸爸在跟我们开...转载 2018-08-21 10:37:40 · 663 阅读 · 0 评论 -
iOS11适配
iOS11适配一. 在UIKit’s Bars中加入的新功能WWDC通过iOS新增的文件管理App:Files开始介绍,在Files这个APP中能够看到iOS11中UIKit’s Bars的一些新特性:在浏览功能上的大标题视图(向上滑动后标题会回到原来的UI效果)、横屏状态下tab上的文字和icon会变为左右排列。我用iOS11的模拟器体验了一下Files这个APP,如下图所示:...转载 2018-08-21 10:38:14 · 628 阅读 · 0 评论 -
谈谈 iOS 中图片的解压缩
原文地址 对于大多数 iOS 应用来说,图片往往是最占用手机内存的资源之一,同时也是不可或缺的组成部分。将一张图片从磁盘中加载出来,并最终显示到屏幕上,中间其实经过了一系列复杂的处理过程,其中就包括了对图片的解压缩。图片加载的工作流概括来说,从磁盘中加载一张图片,并将它显示到屏幕上,中间的主要工作流如下:假设我们使用 +imageWithContentsOfFile: 方法从磁...转载 2018-08-23 10:38:12 · 1085 阅读 · 0 评论 -
谈nonatomic非线程安全问题
谈nonatomic非线程安全问题背景由于我对SDWebImage这块比较熟悉,并且基于SDWebImage封装了一层对业务更友好的HTSWebImage库。所以一直以来SDWebImage的相关Crash都是我在负责。由于图片加载频繁使用到多线程,所以SDWebImage的crash总是时不时会带来些惊喜(惊悚)。也有不少常年未解之谜,明明看上去没有任何问题,但是就是发生了E...转载 2018-08-23 10:37:45 · 493 阅读 · 0 评论 -
NSString转换float的精度问题
NSString 转换 float 的精度问题, 换double类型可以解决@”0.01” 转换成float时, 经常会变成 0.009999799 这种形式, 因为float类型无法精准保存, 系统会选一个接近的值来代替.而double类型则可以有更好的精度.http://stackoverflow.com/questions/9328260/converting-nsst...原创 2018-08-27 10:43:49 · 3492 阅读 · 1 评论 -
iOS传感器:App前后台切换后,获取敏感信息使用touch ID进行校验
iOS传感器:App前后台切换后,获取敏感信息使用touch ID进行校验今天咱们要实现的一个案例需求就是:使用touch ID进行指纹识别指纹识别错误之后,可以使用apple ID的密码进行验证APP进入到后台,10秒之内切回到前台,不做二次验证。APP进入到后台,超过10秒切回到前台,再次进行指纹验证。1. 指纹识别传感器的用法介绍上面听完介绍,感觉好像屌屌的...转载 2018-08-27 10:45:20 · 562 阅读 · 0 评论 -
Core Image 介绍
文章摘自 https://colin1994.github.io/2016/10/21/Core-Image-Custom-Filter/自定义 Filter 流程自定义的 Filter 和系统内置的各种 CIFilter,使用起来方式是一样的。我们唯一要做的,就是实现一个符合规范的 CIFilter 的子类,然后该怎么用怎么用。这里总结起来就3步:编写 CIKernel:使用...转载 2018-08-20 10:32:00 · 796 阅读 · 0 评论 -
Core Image之自定 Filter
文章摘自 https://colin1994.github.io/2016/10/21/Core-Image-Custom-Filter/自定义 Filter 流程自定义的 Filter 和系统内置的各种 CIFilter,使用起来方式是一样的。我们唯一要做的,就是实现一个符合规范的 CIFilter 的子类,然后该怎么用怎么用。这里总结起来就3步:编写 CIKernel:使用...转载 2018-08-20 10:34:44 · 541 阅读 · 0 评论 -
CVPixelBufferCreate使用的坑
CVReturn status = CVPixelBufferCreate(kCFAllocatorDefault, imageSize.width, imageSize.height, kCVPixelFormatType_32ARGB, (__bridge CFDictionaryRef) options, ...原创 2018-08-20 10:42:44 · 5307 阅读 · 1 评论