自定义博客皮肤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开发技术分享

  • 博客(67)
  • 资源 (1)
  • 收藏
  • 关注

转载 深入理解C语言指针

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

2019-10-08 22:59:33 2706

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

2019年10月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下:编程语言比例rankpl_percentage1java33.54%2cpp16.38%3c_sharp12.79%4javascript12.59%5python7.68%6go7.25%7ph...

2019-10-08 22:36:18 33907 3

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

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

2019-10-08 22:29:03 2675

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

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

2019-09-27 13:45:13 1634

原创 GCD中dispatch_barrier的使用方法

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

2019-09-27 13:37:00 2025

原创 GCD中dispatch_group的使用方法

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

2019-09-27 13:31:00 1752

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

当我们需要进行循环遍历时,例如遍历一个数组,我们一般会使用 For-In 循环,For-In 循环会从数组第一个元素开始依次循环遍历到最后一个元素:NSArray *arr = @[@"a", @"b", @"c", @"d", @"e"]; for (NSString *str in arr) { NSLog(@"str = %@", str);}// 打印:/*2...

2019-09-27 13:27:04 2093

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

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

2019-09-27 13:16:37 2879

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

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

2019-09-16 22:36:18 1716

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

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

2019-09-13 00:33:23 1688

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

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

2019-09-08 01:14:26 1524

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

原文地址:https://blog.csdn.net/u013378438/article/details/80353267Mach-OMach-O是Mach Object文件格式的缩写。它是用于可执行文件,动态库,目标代码的文件格式。作为a.out格式的替代,Mach-O格式提供了更强的扩展性,以及更快的符号表信息访问速度。Mach-O格式为大部分基于Mach内核的操作系统所使用的,包括N...

2019-09-08 00:47:10 1551

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

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

2019-08-26 14:46:51 1776

原创 Swift 实现单例类

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

2019-08-26 13:28:02 2432

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

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

2019-08-15 14:18:37 5067 2

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

文章目录位运算符按位取反运算符按位与运算符按位或运算符按位异或运算符按位左移、右移运算符无符号整数的移位运算有符号整型的移位运算溢出运算符值溢出优先级和结合性运算符函数前缀和后缀运算符复合赋值运算符等价运算符自定义运算符自定义中缀运算符的优先级和结合性作为基本运算符的补充,Swift 提供了一些对数值进行复杂运算的高级运算符。它们包含了在 C 和 Objective-C 中已经被大家所熟知的位运...

2019-08-08 13:40:30 1566

原创 Swift learning part 25 - 访问控制

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

2019-08-07 15:52:11 1432

原创 Swift learning part 24 - 内存安全

文章目录理解内存访问冲突内存访问性质In-Out 参数的访问冲突方法里 self 的访问冲突属性的访问冲突默认情况下,Swift 会阻止你代码里不安全的行为。例如,Swift 会保证变量在使用之前就完成初始化,在内存被回收之后就无法被访问,并且数组的索引会做越界检查。Swift 也保证同时访问同一块内存时不会冲突,通过约束 代码里对于存储地址的写操作,获取那块内存的访问独占权。因为 Swift...

2019-08-06 15:33:55 1472

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

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

2019-08-06 08:47:40 1426

原创 Swift learning part 22 - 泛型

文章目录泛型解决的问题泛型函数类型参数命名类型参数泛型类型泛型扩展类型约束类型约束语法类型约束实践关联类型关联类型实践扩展现有类型来指定关联类型约束关联类型在关联类型约束里使用协议泛型 Where 语句具有泛型 Where 子句的扩展具有泛型 Where 子句的关联类型泛型下标泛型代码让你能够根据自定义的需求,编写出适用于任意类型、灵活可重用的函数及类型。它能让你避免代码的重复,用一种清晰和抽象...

2019-08-03 23:53:56 1473

原创 Swift learning part 21 - 协议

文章目录协议语法属性要求方法要求Mutating 方法要求构造器要求协议构造器要求的类实现可失败构造器要求协议作为类型委托(代理)模式在扩展里添加协议遵循有条件地遵循协议在扩展里声明采纳协议协议类型的集合协议的继承类类型专属协议协议合成检查协议一致性可选的协议要求协议扩展提供默认实现为协议扩展添加限制条件协议定义了一个蓝图,规定了用来实现某一特定任务或者功能的方法、属性,以及其他需要的东西。类、...

2019-08-01 14:14:14 1456

原创 Swift learning part 20 - 扩展

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

2019-07-24 16:43:15 1423

原创 Swift learning part 19 - 嵌套类型

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

2019-07-24 14:56:44 1459

原创 Swift learning part 18 - 类型转换

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

2019-07-24 10:07:14 1798

原创 Swift learning part 17 -错误处理

文章目录表示与抛出错误处理错误用 throwing 函数传递错误用 Do-Catch 处理错误将错误转换成可选值禁用错误传递指定清理操作错误处理(Error handling)是响应错误以及从错误中恢复的过程。Swift 在运行时提供了对可恢复错误进行抛出、捕获、传递和操作等支持。某些操作无法保证总是执行完所有代码或总是生成有用的结果。可选类型可用来表示值缺失,但是当某个操作失败时,理解造成失...

2019-07-23 16:17:34 1416

原创 Swift learning part 16 - 可选链

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

2019-07-23 13:34:26 1414

原创 Swift learning part 15 - 析构过程

文章目录析构过程原理析构器实践析构器只适用于类类型,当一个类的实例被释放之前,析构器会被立即调用。析构器用关键字 deinit 来标示,类似于构造器要用 init 来标示。析构过程原理Swift 通过自动引用计数(ARC)处理实例的内存管理,并且会自动释放不再需要的实例以释放资源。通常当你的实例被释放时你不需要手动地去清理,但是,当使用自己的资源时,你可能需要进行一些额外的清理。例如,如果创...

2019-07-23 10:10:22 1398

原创 Swift learning part 14 - 构造过程

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

2019-07-19 16:22:04 1503

原创 Swift learning part 13 - 继承

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

2019-07-18 23:53:12 1427

原创 Swift learning part 12 - 下标

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

2019-07-18 16:58:57 1479

原创 Swift learning part 11 - 方法

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

2019-07-18 08:33:10 1404

原创 Swift learning part 10 - 属性

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

2019-07-17 17:01:27 1530

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

文章目录结构体和类对比类型定义的语法结构体和类的实例属性访问结构体类型的成员逐一构造器结构体和枚举是值类型类是引用类型恒等运算符指针类和结构体的选择字符串、数组、和字典类型的赋值与复制行为类和结构体是构建代码所用的一种通用且灵活的构造体。可以使用完全相同的语法规则来为类和结构体定义属性(常量、变量)和添加方法。通常一个类的实例被称为对象,在 Swift 中,类和结构体的关系比在其他语言中更加密切...

2019-07-17 14:20:29 1476

原创 Swift learning part 8 - 枚举

文章目录枚举语法使用 Switch 语句匹配枚举值枚举成员的遍历关联值原始值原始值的隐式赋值使用原始值初始化枚举实例递归枚举枚举为一组相关的值定义了一个共同的类型,使你可以在你的代码中以类型安全的方式来使用这些值。C 语言中,枚举会为一组整型值分配相关联的名称。Swift 中的枚举更加灵活,不必给每一个枚举成员提供值,若提供则该值的类型可以是字符串、字符、整型或浮点数。此外,枚举成员可以指定任...

2019-07-17 11:47:19 1462

原创 Swift learning part 7 - 闭包

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

2019-07-17 00:10:34 1428

原创 Swift learning part 6 - 函数

文章目录函数的定义与调用函数参数与返回值无参数函数多参数函数无返回值函数多重返回值函数可选元组返回类型隐式返回的函数函数参数标签和参数名称指定参数标签忽略参数标签默认参数值可变参数输入输出参数函数类型使用函数类型函数类型作为参数类型函数类型作为返回类型嵌套函数函数是一段完成特定任务的独立代码片段。你可以通过给函数命名来标识某个函数的功能,这个名字可以被用来在需要的时候"调用"这个函数来完成它的任...

2019-07-16 16:30:14 1629

原创 Swift learning part 5 - 控制流

控制流For-In 循环While 循环WhileRepeat-While条件语句IfSwitch不存在隐式的贯穿区间匹配元组值绑定(Value Bindings)Where复合匹配控制转移语句ContinueBreak循环语句中的 breakSwitch 语句中的 break贯穿(Fallthrough)带标签的语句提前退出检测 API 可用性Swift 提供了多种流程控制结构,包括可以多次执...

2019-07-16 09:40:30 1501

原创 Swift learning part 4 - 集合类型

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

2019-07-15 23:22:58 1445

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

字符串和字符字符串字面量多行字符串字面量字符串字面量的特殊字符扩展字符串分隔符初始化空字符串字符串可变性字符串是值类型使用字符连接字符串和字符字符串插值计算字符数量访问和修改字符串字符串索引插入和删除子字符串比较字符串字符串/字符相等前缀/后缀相等字符串是诸如 “hello, world”,“abcdefg” 这样有序的字符(Character)类型的值的集合,通过 String 类型来表示。...

2019-07-15 17:08:37 1506

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

基本运算符术语赋值运算符算术运算符求余运算符一元运算符组合赋值运算符比较运算符三元运算符空合运算符区间运算符闭区间运算符半开区间运算符单侧区间逻辑运算符逻辑非运算符逻辑与运算符逻辑或运算符逻辑运算符组合计算使用括号来明确优先级运算符是检查、改变、合并值的特殊符号或短语,Swift 支持大部分标准 C 语言的运算符,且改进了许多特性来减少常规编码错误。如:赋值符 (=) 不返回值,以防止想要把判断...

2019-07-15 15:07:38 1477

OC与Swift混编的三种情况

OC与Swift混编的三种情况: 1、OC工程中写入Swift文件并随手创建桥接文件 2、Swift工程中写入OC文件并随手创建桥接文件 3、混编时舍弃创建桥接文件,手动再创建一遍的方法

2017-03-25

空空如也

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

TA关注的人

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