自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 iOS中的 uncaught exception 主要有哪些

iOS 中的错误分为 NSError 和 NSException,其中NSError用于可恢复的错误,而NSException则是不可恢复的错误,对于NSException我们可以通过NSSetUncaughtExceptionHandler来进行崩溃的捕获获取,那么常见的 NSException 有哪些呢?数组越界访问NSArray *array = @[@"2"];NSString ...

2019-08-22 15:28:42 684

原创 C++文件打包成framework如何接入使用

最近遇到一个问题,将含有C++文件的代码打包成framework时,打包时正常,但是不能正确接入到项目中使用,一直报如下错误Undefined symbols for architecture arm64: , referenced from:排查了很久,确定头文件和framework的路径都没有问题后,确定是打包引入的C++文件所导致的,如果坚持要包含C++并且打包成framework,可...

2019-08-19 11:02:15 1000

原创 Cocoapods的相关知识点

最近需要在cocoapods上发布SDK,虽然在之前的公司也弄过本地私有库,但是相比较发布到 Cocoapods 上还是有一些差别的,下面列举一些要点。验证本地 podspec 文件的合法性:pod spec lint XXX.podspec验证合法性通过之后将其推送到cocoapods上,pod trunk push XXX.podspec需要注意的:邮箱的问题,首次推送会对注册的...

2019-08-14 13:46:09 306

原创 逻辑表达式的合法性判断(包含小括号的匹配)-iOS

需求的由来:后台将过滤的功能放到客户端来做给定一个逻辑表达式,客户端本地做逻辑判断涉及到问题:1、逻辑表达式的合法性判断2、逻辑表达式如何转换求解...

2019-07-27 15:06:53 2339

原创 load 方法与initialize 方法的使用区别

调用时机的不同 load 方法在程序启动编译时调用,initialize 方法在使用类时调用是否能被分类覆盖如果分类中实现了 load 方法,不会覆盖类中的 load 方法,编译时类与分类都实现了 load 方法时会都调用,多个分类重写了 load 方法时,编译时都会调用各个分类的 load 方法,同时子类的 load 方法也不会影响initialize 方法能被分类覆盖,一旦分类重写了...

2019-07-27 13:40:01 258

原创 git 删除本地以及远程标签

1、删除本地以及远程仓库的标签删除本地仓库标签:git tag -d tagName删除远程仓库标签:git push --delete tag tagName注:tagName 为待删除标签名称2、重新打标签并推送到远程仓库重新在当前本地分支打标签:git tag newTagName将标签推送到远程仓库:git push --tags注:newTagName 为新的标签名称...

2019-07-15 11:15:56 2375

转载 .a静态库与framework库,以及库的添加

Xcode 依赖的第三方库包括:.a 静态库(Static Library). framework 动态库 (Dynamic Library)并不能简单的认为 .framework 后缀的就是“动态库”,因为在 iOS/macOS 开发中,.framework 又分为“静态 framework”和“动态 framework”静态 .framework 可以理解是:.a 静态文件 ...

2018-12-03 21:33:13 739

原创 基于sqlite3创建数据库-iOS

SQlite简介sqlite是一个轻量级的跨平台的数据库,实现了自给自足的、无服务器、零配置的、事务性的SQL数据库引擎。SQlite引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQlite直接访问其存储文件。SQlite命令与关系数据库进行交互的标准SQlite命令类似于SQL,包括CREATE、SELECT、INSERT、UPDATE、DELETE和DROP,基于...

2018-11-28 10:45:02 323

原创 iOS中使用结构体与位域,大小端数据转换

如何在iOS中使用结构体数据类型在定义结构体时,如果不涉及到OC中的对象时,可以直接将结构体当作成员变量属性使用,一旦在结构中定义了OC中的对象,编译会报错,提示“ARC时禁止在结构体中定义OC的对象”,主要原因在于ARC无法管理结构体中的OC对象的生命周期以内存。可以从以下几个方面分析:ARC在是编译器特性,编译时在合适的位置插入对象的内存管理代码。由于标准的C语言结构体struct没有析...

2018-11-27 13:23:34 1323

原创 判断小数点后几位:整数的取模运算 (%) 与小数的取模运算(fmod)

整型取模运算符:%判断一个整数A是否为某一个整数B的倍数时,我们可以通过整数的取模运算符 % 来判断,A % B 等于0时,则A为B的倍数,反之则不是,其中A、B必须为整数型数值并且B不能为0...

2018-11-26 18:02:38 6494

转载 关于 charset 的几种编码方式

经常遇到charset=gb2312、charset=iso-8859-1、charset=utf-8这几种编码方式,它们有什么不同,看下面的图 编码方式 含义 charset=iso-8859-1 西欧的编码,英文编码 charset=gb2312 中文编码 charset=utf-8 世界通用语言编码 charset=big5 ...

2018-09-12 17:26:25 17730

原创 use_frameworks!的作用、静态库与动态库、tbd

首先明确一下几个概念 从iOS8/Xcode6开始,苹果允许使用动态库 通过cocoapods管理应用程序时,在Podfile文件中,use_frameworks!的使用区别如下:使用use_frameworks!时dynamic frameworks 方式 -> .framework1、cocoapods会生成对应的 frameworks 文件2、在Link Bina...

2018-09-12 00:05:35 12307

原创 copy与mutableCopy的深浅拷贝

copy与mutableCopy

2018-09-11 10:49:32 215

原创 又见block(三):block实质

首先来看看block截获自动变量(外部局部变量)的几种情况block“带有自动变量(截获局部变量)”的含义在于具有“截获自动变量值”的能力ARC中常见的block用法场景如下: 由以上结果总结如下:默认block的类型是NSGlobalBlock,一旦在block中引用自动变量(包括OC对象),无论是否修改,block类型变为NSMallocBlock默认情况下,在blo...

2018-09-08 17:18:43 575

原创 又见block(七):截获对象

在OC中,C语言结构体不能含有__strong修饰符的变量,因为编译器不知道什么时候初始化和废弃C语言结构体,不能很好的管理内存。 OC的运行时库能够准确地把握block从栈复制到堆以及堆上的block被废弃的时机,所以block结构体中即使含有__strong或者__weak修饰符的变量,也可以恰当地进行初始化和废弃。在__main_block_desc_0结构体中增加的成员变量...

2018-09-08 12:16:33 398

原创 又见block(六):block存储域与__block变量存储域

本文主要讨论block的存储域与__block变量的存储域(即存储位置)我们知道它们在转换成C++源代码时都被转换成了结构体类型,都是在栈上生成的结构体实例 名称 实质 block 栈上block的结构体实例 __block变量 栈上__block变量的结构体实例前面我们说到block其实也是一种OC对象,其对应的类以及存储位置有以下几种...

2018-09-07 00:13:05 523

原创 如何判断当前线程是主线程

在iOS中如何准确判断当前线程是主线程

2018-09-05 23:04:14 8698

转载 CoreAnimation(二):寄宿图

CALayer的寄宿图:图层中包含的图层 contents属性contents 是一个id类型,但实际上它需要一个CGImage类型才能正常显示,UIImage有一个CGImage属性,返回一个CGImageRef类型,但是这个类型不是一个Cocoa对象,而是一个Core Foundation类型,因此需要进行实现如下转换。layer.contents = (__bridge i...

2018-09-05 14:50:34 193

转载 CoreAnimation(一):关于图层树(既生瑜,何生亮)

CoreAnimation是一个复合引擎,它的职责就是尽可能快地组合屏幕上不同的可视内容,这个内容是被分解成独立的图层,存储在一个叫做图层树的体系中,图层树是UIKit以及iOS应用程序中屏幕上所能看见一切的基础。视图:UIView及其子类一个视图就是在屏幕上显示的一个矩形块,例如图片、文字或视频。能够拦截处理类似鼠标点击或触摸手势等用户输入。视图在层级关系中可以相互嵌套。父视...

2018-09-04 22:35:52 244

翻译 又见block(四):block捕获自动变量

首先来看看block截获自动变量值的几种情况

2018-09-04 09:54:11 428

翻译 又见block(五): __block变量和对象

__block说明符可指定任何类型的自动变量ARC时,id类型以及对象类型变量一定有所有权修饰符,缺省是__strong,因此__block id obj = [[NSObject alloc] init];等同于 __block __strong id obj = [[NSObject alloc] init];通过在终端下clang该代码,得到的转换源码主要如下:stat...

2018-09-03 21:46:19 683

原创 又见block(二):block语法定义

在上一篇提到block是带有自动变量(局部变量)的匿名函数,本文来看看block的语法定义首先作如下约定:returnType:返回值类型blockName:block的名称paraType:参数类型paraName:参数名称 block的语法定义主要有以下几种:1、标准的声明与定义 returnType (^blockName)(paraType) = ...

2018-09-01 14:08:12 905

原创 又见block(一):block是什么?

block的原理实质问题是一道分水岭,区分中高级程序的试金石,一般的大公司,他可能不会问你内存管理甚至多线程编程与简单的一笔带过,但是block一定会仔细问。无奈的是平时只知使用,对其原理与实质没有深究,因此数次面试倒在这道坎上,真是心有不甘,这次好好理理关于block的前因后果,以供后续随手翻阅查证。...

2018-08-31 16:12:43 4208

原创 记一次AES的解密之旅

某日,群里一位开发者求助关于AES的解密问题,说来也巧,那天我正好好也刚刚调试完一个AES的解密问题,因此想顺手帮他解决下。 问题如下:NSString *key = @"Q$b4D8cCNM$@O0kd";NSString *contetntText = @"0v48yhPb+E+Xr0Q5trDIc01Ryy2Y+stlCrPEy0DWYKRcq8Z3prfCSZyBCsekQo9nd...

2018-08-30 17:09:33 444

转载 iOS内存管理集合(转)

原文链接 1、讲一下对iOS内存管理的理解看到这个问题,我准备是从MRC和ARC结合引用计数机制来讲解下内存管理,想到的是比较常规和浅显,更深的原理回答为:(三种方案的结合)TaggedPointer:主要是针对类似于NSNumber的小对象类型NONPOINTER_ISA (64位系统下) 第一位的0和1代表的是纯isa指针还是NONPOINTER_ISA指针第二位代码...

2018-08-29 21:27:30 434

原创 击鼓传花OC代码实现

击鼓传花游戏规则:n个人围成一圈,预定一个数字,按照指定的方向(顺时针或者逆时针),依次报数,报到指定数字的人出局,剩下的人继续直到剩下最后一个人,问最后剩下的人最开始的位置OC实现代码...

2018-08-28 22:30:09 1225

翻译 ARC的实现原理

1、ARC的实现原理我们都知道,ARC是编译器特性,程序在编译的时候,编译器帮我们在合适的地方插入retain、release等代码以管理对象的引用计数,从而达到自动管理对象生命周期的目的。但是只有编译器是无法单独完成这一工作的,还需要OC的运行时库的配合协助,因此ARC的实现工具主要包括:LLVM编译器(clang 3.0以上)OC运行时库493.9以上2、__stron...

2018-08-28 09:43:50 3457

原创 weak属性修饰词解析

1、使用场景weak常用于修饰代理属性,以防止循环引用导致内存泄漏,__weak与weak基本相同,只不过一个用于修饰变量,一个用于修饰属性。 __weak主要用于防止block中的循环引用2、weak的原理解析Runtime在注册某个类时,相应的会维护一个该类的weak表,该weak表实际上是一个hash表,其中key:所指对象的地址value:weak指针的地址数组(注意...

2018-08-25 19:06:53 1403

原创 开篇:说说OC中的property修饰词

OC中的属性property按照其功能分为以下三种类型:线程安全 内存管理 读写权限缺省情况下,基本数据类型的修饰词是:atomic、assign、readwrite;普通对象的修饰词是:atomic、strong、readwrite线程安全:atomic与nonatomicatomic:原子属性;修饰的对象会保证 setter 和 getter 方法的完整性,任何线程访问时...

2018-08-25 12:39:51 340

空空如也

空空如也

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

TA关注的人

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