自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

毛毛虫

iOS开发技术分享

转载 深入理解C语言指针

一、指针的概念 要知道指针的概念,要先了解变量在内存中如何存储的。在存储时,内存被分为一块一块的。每一块都有一个特有的编号。而这个编号可以暂时理解为指针,就像酒店的门牌号一样。 1.1、变量和地址 先写一段简单的代码: void main(){ int x = 10, int y = 20; }...

2019-10-08 22:59:33

阅读数 308

评论数 0

转载 2019年10月中国编程语言排行榜

2019年10月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.54% 2 cpp 16.38% 3 c_sharp 12.79% 4 jav...

2019-10-08 22:36:18

阅读数 6045

评论数 2

转载 面试官,不要再问我三次握手和四次挥手

三次握手和四次挥手是各个公司常见的考点,也具有一定的水平区分度,也被一些面试官作为热身题。很多小伙伴说这个问题刚开始回答的挺好,但是后面越回答越冒冷汗,最后就歇菜了。 见过比较典型的面试场景是这样的: 面试官:请介绍下三次握手 求职者:第一次握手就是客户端给服务器端发送一个报文,第二次就是服...

2019-10-08 22:29:03

阅读数 318

评论数 0

原创 iOS多线程技术3 - GCD的详细用法

多线程的相关概念 工欲善其事,必先利其器,在进入 GCD 学习之前,我们有必要先了解一下多线程的一些概念。 进程:进程是程序在计算机上的一次执行活动。例如打开一个 app,就开启了一个进程,一个进程可以并发多个线程。 线程:线程就是操作系统能够进行运算调度的最小单位。它被包含...

2019-09-27 13:45:13

阅读数 175

评论数 0

原创 GCD中dispatch_barrier的使用方法

假如现在有几组任务,我们并不关心每组中的各个任务的执行顺序,但是我们要求这几组任务按顺序分批进行,也就是说第一组任务全部执行之后,再启动第二组任务,以此类推。在这种情况下,我们使用 dispatch_barrier 函数将会非常高效,dispatch_barrier 函数又称作栅栏函数,顾名思义,...

2019-09-27 13:37:00

阅读数 190

评论数 0

原创 GCD中dispatch_group的使用方法

在实际开发中,我们经常会遇到这样的问题:有几个不同的任务,当所有任务完成后需要根据这些任务的结果去执行下一步操作(例如:下载多张图片,全部下载后进行拼接并显示出来)。我们利用上边刚刚讲过的 dispatch_barrier 方法或许可以达到此类目的,但下边要讲的 dispatch_group 相关...

2019-09-27 13:31:00

阅读数 192

评论数 0

原创 GCD中dispatch_apply函数的使用方法

当我们需要进行循环遍历时,例如遍历一个数组,我们一般会使用 For-In 循环,For-In 循环会从数组第一个元素开始依次循环遍历到最后一个元素: NSArray *arr = @[@"a", @"b", @"c", @"d...

2019-09-27 13:27:04

阅读数 180

评论数 0

原创 GCD中dispatch_semaphore(信号量)的使用方法

Dispatch Semaphore(信号量) 是持有计数的信号,该信号是多线程编程中的计数类型信号。信号类似于高速收费站的栏杆,可以通过时抬起栏杆,不可以通过时放下栏杆。在 Dispatch Semaphore 中使用了计数来实现该功能:计数小于 0 时等待,阻塞当前线程。计数为 0 或大于 0...

2019-09-27 13:16:37

阅读数 190

评论数 0

原创 iOS多线程技术2 - NSOperation和NSOperationQueue的详细用法

NSOperation 和 NSOperationQueue 是苹果提供的一套多线程解决方案,是基于 GCD 的封装,完全面向对象,代码可读性较高。 NSOperation NSOperation 是一个抽象类,并不具备封装操作的能力,用作父类用来约束子类,要想封装操作,必须使用它的子类。 ...

2019-09-16 22:36:18

阅读数 188

评论数 0

原创 iOS多线程技术1 - NSThread的一般用法

NSThread 简介 NSThread 是苹果官方提供的面向对象类线程操作技术,简单方便,可以直接操作线程对象,不过需要自己控制线程的生命周期,在平时使用较少。 开启线程 使用 NSThread 开启线程有类方法和实例方法两种,类方法会直接执行任务,实例方法需要在实例初始化后调用 star...

2019-09-13 00:33:23

阅读数 183

评论数 0

转载 Objective-C runtime机制前传2 - Mach-O格式和runtime

在前传1中,我们分析了解了XNU内核所支持的二进制文件格式Mach-O。同时还留了一个小尾巴,就是Mach-O文件中和Objective-C以及runtime相关的Segment section。今天,就来了解一下它们。 OC之源起 我们知道,程序的入口点在iOS中被称之为main函数: #...

2019-09-08 01:14:26

阅读数 186

评论数 0

转载 Objective-C runtime机制前传1 - Mach-O格式

原文地址:https://blog.csdn.net/u013378438/article/details/80353267 Mach-O Mach-O是Mach Object文件格式的缩写。它是用于可执行文件,动态库,目标代码的文件格式。作为a.out格式的替代,Mach-O格式提供了更强的...

2019-09-08 00:47:10

阅读数 188

评论数 0

原创 Swift自定义类型的字面量赋值

文章目录字面量类型字面量协议字面量协议实践 字面量类型 所谓字面量,就是指一段能表示特定类型的值(如字符串、布尔值)的值表达式。例如: let number:Int = 6 let name: String = "Tom" 上面例子中,6、Tom 都是字面量。 ...

2019-08-26 14:46:51

阅读数 231

评论数 0

原创 Swift 实现单例类

文章目录声明为类型常量使用GCD方法实现声明为类型常量,以闭包形式进行初始化工作 在 Swift 中创建单例类总体来说可以使用两种方法,将单例对象声明为类型常量,或者使用GCD方法实现。 声明为类型常量 class SingletonClass1 { static let shar...

2019-08-26 13:28:02

阅读数 189

评论数 0

原创 Swift 修改状态栏颜色/样式(重写 preferredStatusBarStyle 无效的问题)

文章目录没有使用导航控制器的情况使用了系统导航控制器的情况使用了自定义导航控制器的情况 默认情况下,顶部状态栏(statusBar)为 default 样式(即黑色文字和图标),但我们有时会希望可以修改状态栏的样,这样,我们的应用看起来会更加协调。 我们针对不同的情况,所做的处理也不尽相同,这...

2019-08-15 14:18:37

阅读数 333

评论数 0

原创 Swift learning part 26 - 高级运算符

文章目录位运算符按位取反运算符按位与运算符按位或运算符按位异或运算符按位左移、右移运算符无符号整数的移位运算有符号整型的移位运算溢出运算符值溢出优先级和结合性运算符函数前缀和后缀运算符复合赋值运算符等价运算符自定义运算符自定义中缀运算符的优先级和结合性 作为基本运算符的补充,Swift 提供了一些...

2019-08-08 13:40:30

阅读数 190

评论数 0

原创 Swift learning part 25 - 访问控制

文章目录模块和源文件访问级别访问级别基本原则默认访问级别单 target 应用程序的访问级别框架的访问级别单元测试 target 的访问级别访问控制语法自定义类型元组类型函数类型枚举类型嵌套类型子类常量、变量、属性、下标Getter 和 Setter构造器默认构造器结构体默认的成员逐一构造器协议协...

2019-08-07 15:52:11

阅读数 178

评论数 0

原创 Swift learning part 24 - 内存安全

文章目录理解内存访问冲突内存访问性质In-Out 参数的访问冲突方法里 self 的访问冲突属性的访问冲突 默认情况下,Swift 会阻止你代码里不安全的行为。例如,Swift 会保证变量在使用之前就完成初始化,在内存被回收之后就无法被访问,并且数组的索引会做越界检查。 Swift 也保证同时访问...

2019-08-06 15:33:55

阅读数 179

评论数 0

原创 Swift learning part 23 - 自动引用计数

文章目录自动引用计数的工作机制自动引用计数实践类实例之间的循环强引用解决实例之间的循环强引用弱引用无主引用无主引用和隐式解包可选值属性闭包的循环强引用解决闭包的循环强引用定义捕获列表弱引用和无主引用 Swift 使用自动引用计数(ARC)机制来跟踪和管理你的应用程序的内存。通常情况下,Swift ...

2019-08-06 08:47:40

阅读数 183

评论数 0

原创 Swift learning part 22 - 泛型

文章目录泛型解决的问题泛型函数类型参数命名类型参数泛型类型泛型扩展类型约束类型约束语法类型约束实践关联类型关联类型实践扩展现有类型来指定关联类型约束关联类型在关联类型约束里使用协议泛型 Where 语句具有泛型 Where 子句的扩展具有泛型 Where 子句的关联类型泛型下标 泛型代码让你能够根...

2019-08-03 23:53:56

阅读数 177

评论数 0

原创 Swift learning part 21 - 协议

文章目录协议语法属性要求方法要求Mutating 方法要求构造器要求协议构造器要求的类实现可失败构造器要求协议作为类型委托(代理)模式在扩展里添加协议遵循有条件地遵循协议在扩展里声明采纳协议协议类型的集合协议的继承类类型专属协议协议合成检查协议一致性可选的协议要求协议扩展提供默认实现为协议扩展添加...

2019-08-01 14:14:14

阅读数 183

评论数 0

原创 Swift learning part 20 - 扩展

文章目录扩展的语法计算型属性构造器方法可变实例方法下标嵌套类型 扩展可以为一个已有的类、结构体、枚举或者协议添加新功能。它还具有在不访问被扩展类型的原始源代码的情况下完成扩展的能力(即 逆向建模 )。扩展和 Objective-C 中的分类类似。但是,与 Objective-C 不同的是,Swif...

2019-07-24 16:43:15

阅读数 178

评论数 0

原创 Swift learning part 19 - 嵌套类型

文章目录嵌套类型实践引用嵌套类型 枚举常被用于为特定类或结构体实现某些功能。类似地,枚举可以方便的定义工具类或结构体,从而为某个复杂的类型所使用。为了实现这种功能,Swift 允许你定义嵌套类型,可以在支持的类型中定义嵌套的枚举、类和结构体。 要在一个类型中嵌套另一个类型,将嵌套类型的定义写在其外...

2019-07-24 14:56:44

阅读数 181

评论数 0

原创 Swift learning part 18 - 类型转换

文章目录为类型转换定义类层次检查类型向下转型Any 和 AnyObject 的类型转换 类型转换可以判断实例的类型,也可以将实例看做是其父类或者子类的实例。 类型转换在 Swift 中使用 is 和 as 操作符实现。这两个操作符提供了一种简单达意的方式去检查值的类型或者转换它的类型。也可以用它来...

2019-07-24 10:07:14

阅读数 181

评论数 0

原创 Swift learning part 17 -错误处理

文章目录表示与抛出错误处理错误用 throwing 函数传递错误用 Do-Catch 处理错误将错误转换成可选值禁用错误传递指定清理操作 错误处理(Error handling)是响应错误以及从错误中恢复的过程。Swift 在运行时提供了对可恢复错误进行抛出、捕获、传递和操作等支持。 某些操作无法...

2019-07-23 16:17:34

阅读数 179

评论数 0

原创 Swift learning part 16 - 可选链

文章目录使用可选链式调用代替强制展开为可选链式调用定义模型类通过可选链式调用访问属性通过可选链式调用来调用方法通过可选链式调用访问下标访问可选类型的下标连接多层可选链式调用在方法的可选返回值上进行可选链式调用 可选链式调用是一种可以在当前值可能为 nil 的可选值上请求和调用属性、方法及下标的方法...

2019-07-23 13:34:26

阅读数 176

评论数 0

原创 Swift learning part 15 - 析构过程

文章目录析构过程原理析构器实践 析构器只适用于类类型,当一个类的实例被释放之前,析构器会被立即调用。析构器用关键字 deinit 来标示,类似于构造器要用 init 来标示。 析构过程原理 Swift 通过自动引用计数(ARC)处理实例的内存管理,并且会自动释放不再需要的实例以释放资源。通常当你的...

2019-07-23 10:10:22

阅读数 174

评论数 0

原创 Swift learning part 14 - 构造过程

文章目录存储属性的初始赋值构造器默认属性值自定义构造过程构造参数参数标签和参数名称不带参数标签的构造器参数可选属性类型构造过程中常量属性的赋值默认构造器结构体的逐一成员构造器值类型的构造器代理类的继承和构造过程指定构造器和便利构造器指定构造器和便利构造器的语法类的构造器代理两段式构造过程构造器的继...

2019-07-19 16:22:04

阅读数 190

评论数 0

原创 Swift learning part 13 - 继承

文章目录定义一个基类子类生成重写访问超类的方法、属性及下标重写方法重写属性重写属性的 Getters 和 Setters重写属性观察器防止重写 一个类可以继承另一个类的方法、属性和其它特性。当一个类继承其它类时,继承类叫子类,被继承类叫超类(或父类)。在 Swift 中,继承是区分 类 与其它类...

2019-07-18 23:53:12

阅读数 186

评论数 0

原创 Swift learning part 12 - 下标

文章目录下标语法下标用法下标选项类型下标 下标可以定义在类、结构体和枚举中,是访问集合、列表或序列中元素的快捷方式。可以使用下标的索引设置和获取值,而不需要再调用对应的存取方法。 一个类型可以定义多个下标,通过不同索引类型进行重载,下标不限于一维,可以定义具有多个入参的下标。 下标语法 下...

2019-07-18 16:58:57

阅读数 198

评论数 0

原创 Swift learning part 11 - 方法

文章目录实例方法(Instance Methods)self 属性在实例方法中修改值类型在可变方法中给 self 赋值类型方法 方法是与某些特定类型相关联的函数。类、结构体、枚举都可以定义实例方法;实例方法为给定类型的实例封装了具体的任务与功能。类、结构体、枚举也可以定义类型方法;类型方法与类型...

2019-07-18 08:33:10

阅读数 183

评论数 0

原创 Swift learning part 10 - 属性

文章目录存储属性常量结构体实例的存储属性延时加载存储属性存储属性和实例变量计算属性简化 Setter 声明简化 Getter 声明只读计算属性属性观察器全局变量和局部变量类型属性类型属性语法获取和设置类型属性的值 属性将值和特定的类、结构体或枚举关联。存储属性存储常量或变量作为实例的一部分,计算...

2019-07-17 17:01:27

阅读数 199

评论数 0

原创 Swift learning part 9 - 类和结构体

文章目录结构体和类对比类型定义的语法结构体和类的实例属性访问结构体类型的成员逐一构造器结构体和枚举是值类型类是引用类型恒等运算符指针类和结构体的选择字符串、数组、和字典类型的赋值与复制行为 类和结构体是构建代码所用的一种通用且灵活的构造体。可以使用完全相同的语法规则来为类和结构体定义属性(常量、...

2019-07-17 14:20:29

阅读数 190

评论数 0

原创 Swift learning part 8 - 枚举

文章目录枚举语法使用 Switch 语句匹配枚举值枚举成员的遍历关联值原始值原始值的隐式赋值使用原始值初始化枚举实例递归枚举 枚举为一组相关的值定义了一个共同的类型,使你可以在你的代码中以类型安全的方式来使用这些值。 C 语言中,枚举会为一组整型值分配相关联的名称。Swift 中的枚举更加灵活...

2019-07-17 11:47:19

阅读数 189

评论数 0

原创 Swift learning part 7 - 闭包

文章目录闭包表达式排序方法闭包表达式语法根据上下文推断类型单表达式闭包的隐式返回参数名称缩写运算符方法尾随闭包值捕获闭包是引用类型逃逸闭包自动闭包 闭包是自包含的函数代码块,可以在代码中被传递和使用。Swift 中的闭包与 C 和 Objective-C 中的代码块(blocks)以及其他一些编...

2019-07-17 00:10:34

阅读数 185

评论数 0

原创 Swift learning part 6 - 函数

文章目录函数的定义与调用函数参数与返回值无参数函数多参数函数无返回值函数多重返回值函数可选元组返回类型隐式返回的函数函数参数标签和参数名称指定参数标签忽略参数标签默认参数值可变参数输入输出参数函数类型使用函数类型函数类型作为参数类型函数类型作为返回类型嵌套函数 函数是一段完成特定任务的独立代码片...

2019-07-16 16:30:14

阅读数 294

评论数 0

原创 Swift learning part 5 - 控制流

控制流For-In 循环While 循环WhileRepeat-While条件语句IfSwitch不存在隐式的贯穿区间匹配元组值绑定(Value Bindings)Where复合匹配控制转移语句ContinueBreak循环语句中的 breakSwitch 语句中的 break贯穿(Fallthr...

2019-07-16 09:40:30

阅读数 189

评论数 0

原创 Swift learning part 4 - 集合类型

集合类型集合的可变性数组(Arrays)数组的简单语法创建一个空数组创建一个带有默认值的数组通过两个数组相加创建一个数组用数组字面量构造数组访问和修改数组数组的遍历集合(Sets)集合类型的哈希值集合类型语法创建和构造一个空的集合用数组字面量创建集合访问和修改一个集合遍历一个集合集合操作基本集合操...

2019-07-15 23:22:58

阅读数 186

评论数 0

原创 Swift learning part 3 - 字符串和字符

字符串和字符字符串字面量多行字符串字面量字符串字面量的特殊字符扩展字符串分隔符初始化空字符串字符串可变性字符串是值类型使用字符连接字符串和字符字符串插值计算字符数量访问和修改字符串字符串索引插入和删除子字符串比较字符串字符串/字符相等前缀/后缀相等 字符串是诸如 “hello, world”,“...

2019-07-15 17:08:37

阅读数 186

评论数 0

原创 Swift learning part 2 - 基本运算符

基本运算符术语赋值运算符算术运算符求余运算符一元运算符组合赋值运算符比较运算符三元运算符空合运算符区间运算符闭区间运算符半开区间运算符单侧区间逻辑运算符逻辑非运算符逻辑与运算符逻辑或运算符逻辑运算符组合计算使用括号来明确优先级 运算符是检查、改变、合并值的特殊符号或短语,Swift 支持大部分标...

2019-07-15 15:07:38

阅读数 190

评论数 0

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