随笔分类 - iOS开发
摘要:扫码采用类库:AVFoundation 1、相关权限 1)、需要在info.plist中添加以下权限:Privacy - Camera Usage Description(使用摄像机的权限说明) 2)、权限申请与判断: 查询权限:AVCaptureDevice.authorizationStatus
阅读全文
摘要:Generamba Generamba:是为使用 Xcode 而设计的代码生成器。它主要设计用于生成 VIPER 模块,但很容易自定义模板以生成任何其他模板(在 Objective-C 和 Swift 中)。 1、安装 安装前需要检查ruby版本,需要 Ruby 2.2 或更高版本。 检查ruby版
阅读全文
摘要:IDFA的背景 为了保护用户隐私,早在2012年就不再允许其生态中的玩家获取用户的唯一标识符,但是商家在移动端打广告的时候又希望能监控到每一次广告投放的效果,因此,苹果想出了折中的办法,就是提供另外一套和硬件无关的标识符,用于给商家监测广告效果,同时用户可以在设置里改变这串字符,导致商家没有办法长期
阅读全文
摘要:CoreText是Apple系统的文字渲染引擎。 我们先看一个字符的字形图,了解一下一个字形包含的部分: 它的坐标系为窗口的左下角为视图的原点(跟Mac系统一样的坐标系),而iOS系统的坐标系为窗口的左上角为视图的原点。因此我们在使用CoreText进行绘制文字时,需要对其坐标系进行转换,转换方法如
阅读全文
摘要:线程锁 是为了解决多个线程之间共享同一资源时,对资源的占用控制,防止多个线程之间同时修改同一资源信息,导致不可预知的问题。 锁的实现方式大致可以分为以下两种: 阻塞 忙等 阻塞:如果锁对象被其他线程所持有,那么请求访问的线程就会被加入到等待队列中,因而被阻塞。这就意味着被阻塞的线程放弃了时间片,调度
阅读全文
摘要:MARK: 在OC中的用法: #pragma mark -说明文字(可以不加-) 在swift中的用法:// MARK: - 说明文字(可以不加-) TODO、FIXME(不区分OC、swift) // TODO: 说明文字 // FIXME: 说明文字 需要在xcode中添加run script(
阅读全文
摘要:在截取字符串时,有时我们需要考虑表情符字符,因为不同的表情符字符长度不一样,例如:😁的长度为2。 NSLog(@"length: %ld", @"😁".length); // 此处输出为:length: 2 NSLog(@"length: %ld", @"👴🏻".length); // 此处
阅读全文
摘要:到openssl官网下载openssl源码:https://www.openssl.org/source/ 目前我选择的稳定版本为:openssl-1.1.1k 1、编译x86_64平台 首先需要修改Configurations/15-ios.conf配置文件,这个配置文件里面的target是基于1
阅读全文
摘要:有两种方式 1、通过获取绘图上下文,将图片绘制到上下文中,然后从上下文中取出这个图片(优点就是,绘图过程会对图片做优化处理) 2、通过CGDataProviderCopyData( CGDataProviderRef cg_nullable provider)进行解码 说明:[UIImage ima
阅读全文
摘要:DBL_EPSILON和 FLT_EPSILON主要用于单精度和双精度的比较当中 我们在对小数比较的时候,经常会出现如下情况: double a = 0.5; if (a == 0.5) //正确 x++; double b = sin(M_PI / 6.0); if (b == 0.5) //错误
阅读全文
摘要:__bridge_retained(可以使要转换的变量也持有所赋值的对象) void *p=0; { id obj=[[NSObject alloc] init]; p=(__bridge_retained void*)obj; } NSLog(@"class=%@",[(__bridge id)p
阅读全文
摘要:众所周知,我们在使用NSTimer或者CADisplayLink的时候,经常会导致引用它们的类不能正常释放,那是因为引用它们的类与它们之间产生了循环引用。看以下代码: self.timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:se
阅读全文
摘要:objc_msgSend:用于对objc对象发送消息,执行objc的方法。 objc_msgSendSuper:同上一样,这里是调用objc父类对象的方法。 使用以上函数之前需要对它们做函数转换后,方可使用,以下是这些函数的注释 These functions must be cast to an
阅读全文
摘要:首先我们要了解block的真实结构如下:参考:这里 block其实就是个struct类型,其中的descriptor中的signature正是我们想要的block的方法签名。那么我们只需要获取到signature,然后转换成NSMethodSignature,即可轻易的获取到我们想要的block的参
阅读全文
摘要:问题描述:因为objc是动态语言,对象的类型在运行时才会被确认,所以很容易出现一个定义为NSString类型的变量,在运行时的类型变成了NSNull,从而导致如下错误出现:-[NSNull stringByAppendingFormat:]: unrecognized selector sent t
阅读全文