- 博客(46)
- 收藏
- 关注
原创 iOS 多线程-GCD栅栏方法
上一篇文章记录了队列组的使用,是为了处理多个任务之间的顺序。但是开发中会出现多组任务的顺序问题。例如:现在有两组任务,每组任务中有多个任务需要并发处理,但是两组任务之间需要顺序执行。这个时候需要用到GCD多线程处理的另一种方式:栅栏方法(dispatch_barrier_async)。栅栏方法(dispatch_barrier_async)栅栏方法:就是像筑起一个栅栏一样,将队列中的多组线程...
2020-04-09 12:14:33
920
原创 iOS 多线程-GCD队列组
iOS 多线程-GCD任务+队列.在实际的开发中,对于多线程的使用是多种多样的,因为需求的不同,处理逻辑也不同。现在有两个耗时操作A和B,现在需要A和B都异步执行,当A和B都执行完成后再执行C。这样的操作逻辑很常见,例如:一个界面需要展示两个接口请求的数据,需要两个接口全部请求完成才能刷新视图,展示数据。对于这样的操作逻辑,对于这样的操作要求,我们可以使用队列组来完成。队列组的使用队列...
2020-03-18 16:30:40
448
原创 iOS 多线程-GCD任务+队列
多线程是开发中长用到的技术,特别是对于项目逻辑复杂的程序,更需要多线程的帮助。在学习多线程之前需要来了解几个基本概念:1、进程:每一个运行的程序都是一个进程。2、线程:线程是进程中的一个执行单元,每一个进程中都至少有一个线程。多线程多线程就是指在进程中有多个线程处理任务,多线程的目的是为了提高CPU的利用率。在iOS的开发中使用到的多线程技术有如下3种:1、NSthread2、GC...
2020-03-18 15:10:56
456
原创 iOS SceneDelegate
昨天想写个demo,创建了一个项目发现项目的文件列表里多了一个SceneDelegate文件,刚开始没注意就直接写代码,结果发现AppDelegate中设置window的rootViewController没有用。没办法,找问题找答案。????????????去看了官方视频文档[WWDC2019:Optimizing App Launch](https://developer.apple.com/videos/...
2019-12-28 11:05:18
1303
原创 iOS 数据库-FMDB使用
好久没有写OC代码了,干了一年的cocos2d-x,终于又回归iOS了,这段时间翻看了以前写的,试图控件基本总结完毕,还有一些不常用的以后再补充。后面有时间就写一些其他的。今天就先写一下数据库和一个三方FMDB。数据存储其实iOS的数据存储形式有很多,比如:文件形式,NSUserDefault,数据库等。文件形式可以分为plist文件和归档。数据存储的每一种形式几乎都有其特定的使用途径,例如...
2019-07-22 10:08:01
290
原创 iOS基础控件--UIPickerView
本来这篇想写UICollectionView的,但是上午写了一个demo不是很满意,并且我自己在开发中使用的较少,就留着以后再写吧,今天先来总结一下UIPickerView,这个控件也是一个比较常用的控件,使用场景比较多,比如一些地区选择,分类选择等。对UIPickerView的封装还有一个UIDatePicker控件,这个是系统对UIPickerView的封装,专门用于日期的选择,使用和UIP...
2018-11-20 16:00:29
761
原创 iOS对于UITableView的一些个人理解 QQ好友列表实例
前面几篇文章记录了UITableView的一些特性和使用,今天突然想要写一篇关于UITableView的个人理解。UITableView是一个列表控件,但是在开发中,列表的样子是千奇百怪。每个产品都希望自己设计的app界面是独一的,有这自己的元素。比如:微信的朋友圈列表(动态高度),QQ好友列表(点击展示隐藏分组),京东的物品分类列表(瀑布流)等等。。。面对这样复杂多变的设计,作为一个开发人员...
2018-11-15 14:28:54
228
原创 iOS基础控件--UITableView关于cell中带有UITextField的处理
在上一篇文章的最后有说到在cell中带有UITextField的时候,在cell的复用机制下会有一些问题。关于这个问题的解决其实我们可以参照cell的复用机制。说的有点绕哈。。。解决复用带来的问题,还是用复用的机制,确实挺饶人的。下面来详细说一下。上一篇文章中的代码和文字已经介绍了复用机制,在tableView中的cell都有一个id作为表示,在tableView中展示出来的cell也都有一个...
2018-11-08 15:26:42
2487
原创 iOS基础控件--UITableView之自定义cell和cell的复用
在上一篇文章中有下面一段代码:cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];这里创建cell的时候设置了一个系统style和一个identifier这里的两个属性就是今天这篇文章的内容:自定义cell和cell复用。自定义cell在通常...
2018-11-08 10:32:16
2742
原创 iOS基础控件--UITableView简单介绍
UITableView的简单使用直接先上一段简单UITableView的使用代码。#import "ViewController.h"@interface ViewController ()<UITableViewDelegate, UITableViewDataSource>//添加协议{ //声明tableView和数据源 UITableView *tab...
2018-11-07 14:43:37
291
原创 iOS基础--轮播图
上一篇已经介绍了UIScrollView的使用,并且简单的写了一个轮播图的例子,但是上一篇中的轮播图不能自动滚动,也不能循环轮播。今天有时间整理一下自动循环轮播的真正轮播图实例。循环轮播图的原理实现循环轮播的原理现在常用的有两种:1、创建n+2个滚动子视图。在滚动到首尾时候进行转换调整。2、创建3个滚动子视图,每次滚动结束进行图片位置调整。本实例代码使用第二种方式,创建3个滚动子视图。...
2018-10-11 15:01:07
221
原创 iOS基础控件--UIScrollView
UIScrollView介绍UIScrollView的作用是因为手机屏幕有固定大小的局限性,不能完全展示出想要展示的内容。这个控件的使用一般有两种情况:1、对于大图片的详细展示;2、轮播图。UIScrollView在手机的相册中的使用尤为突出,当我们查看手机相册中图片时,左右滑动切换图片就是轮播图的功能,当双击屏幕放大图片在拖动观察图片就是展示一个大图片了。下面通过对于UIScrollVie...
2018-09-26 11:17:43
170
原创 iOS基础控件-UISlider
UISlider介绍UISlider是一个进度条控件,通过滑动开控制数值的变化,一般使用在一些播放进度,数值调节等。这个控件在开发中的使用也不是很多,在一些金融系统和音视频app中比较常用。UISlider属性@property(nonatomic) float value; // default 0.0. thi...
2018-09-12 15:12:10
381
原创 iOS基础控件--UISwitch
UISwitch是一个开关控件,一般用在设置界面上的一些开关。由于这个控件的一些特性,在开发中并不能很好的满足设计需求,所以一般不常使用。UISwitch创建UISwitch是继承自UIControl的,是UIView的非直接子类,所以创建也是使用同样的方法。 //创建UISwitch,UISwitch的大小是固定的,所以在创建时可以不设置大小。 //注意,在创建UI...
2018-09-12 13:45:00
577
原创 iOS基础控件--UIButton
UIButton和UITextField一样都不是UIView的直接子类,都是UIView子类UIControl的子类。UIButton介绍UIButton是按钮控件,用于用户点击和程序进行交互。按钮的交互是最简单也是最直接的,只需要点击就可以进行操作,所以这个控件也是最常用的。按钮的知识点比较简单,比较难的一点就是按钮上图文排布上面,有的时候可能会因为设计需要我们要让按钮上的图片和文...
2018-09-11 17:30:17
427
原创 iOS基础控件-UITextField
前几天看博客的时候iOS控件的关系图。 在图上可以看到iOS中所有的视图控件都是UIView的子类。今天要记录的UITextField在图上可以看到并不是UIView的直接子类,而是UIView的子类UIControl的子类。UITextField介绍UITextField是文本输入框,这个控件的作用是让用户输入的,前面介绍的基础控件都是展示的,没有说到用户交互,这个控件就涉及到了交...
2018-09-11 13:37:26
341
原创 开发中少见的Debug和Release相关问题
上周在公司项目中出现了一个奇葩问题,以前完全没有遇到过。当时真的是百脸懵逼。。。问题我们的项目是需要蓝牙连接外设,外设根据程序指令执行结果。下面描述一下问题具体表现: 项目使用数据线连接手机进行真机调试的时候,一切正常。程序没有问题,外设运行正确。但是,当断开数据线的连接再运行时,外设的运行和程序设定不符合,运行出错。问题查找在网上查了一下,网上有一个帖子说到是Debug和Rel...
2018-09-10 13:54:41
217
原创 iOS基础控件-UIImageView
UIImageView介绍UIImageView是用来放置图片的容器,在app的开发中,想要展示图片就要使用UIImageView这个控件。下面来介绍使用UIImageView的创建UIImageView和UILabel一样都是继承自UIView的,所以UIImageView的创建和UIView一样。 //UIImageView的创建 UIImageView...
2018-09-03 16:01:59
316
原创 ios 基础控件--UILabel
时隔半年之久,终于又有时间来继续博客的记录。这半年真的是太忙了。。。。UILabel介绍在Xcode中,当深入去查看UILabel的类会发现UILabel是UIView的子类。也就是UIView的一些属性和方法在UILabel中也都是适用的。 UILabel是一个用于展示文字的控件,简单的说创建一个UILabel的实例就是为了放文字的,想要在那个位置展示文字,就在那里创建一个La...
2018-08-29 11:18:52
185
原创 iOS基础控件-UIView
关于UIView关于UIView控件的内容很多,UIView作为iOS开发中的基础控件,所涉及的东西也有很多,下面我来说一些开发中常用到的UIView的属性和方法。UIView的初始化说属性和方法之前,我们先来创建一个UIView的实例。 //UIView的初始化创建,初始化UIView的方法有多种,常用的方法有一下两个 //1、创建一个有位置大小的UIView实...
2018-03-22 15:23:19
536
原创 swift学习第一天
1、常量与变量 常量的声明使用 let 关键字 常量的值在初始化了以后是不可以被修改的,当修改了常量的值会出现下面的错误提示 变量的声明使用 var 关键字 2、数据类型和运算符 swift中的数据类型与OC中相同,运算符取消了自增‘++’和自减‘--’两个运算符,增加了区间运算,其他基本相同区间运算:3、可选项 对于可选项,简单的理解就是可以有值也可以为nil。这...
2018-03-13 14:42:54
148
原创 iOS 页面之间的传值方式
在iOS开发中,为了减少数据请求的次数和进行一些逻辑处理,常会在页面跳转的同时进行值得传递。常用的传值方式有:属性传值、通知传值、委托代理传值、Block传值、KVO传值。在说传值之前,先来说一下页面的跳转。现有A、B两个页面,A页面有个跳转按钮,当点击按钮的时候执行push或者present操作,页面跳转到下一级页面B,这个跳转叫做正向跳转。当点击B页面中的返回按钮,页面返回到上一级页面A,
2017-04-01 10:48:53
434
原创 iOS Block传值
在前面有一篇文章已经对Block做了讲解:点击打开链接 这里是链接前面也说了代理和通知,这两种设计模式的使用可以用来传值,这里再说Block,也是想说一下如何使用Block实现传值。使用Block进行不同类之间的传值,常用场景也是在两个控制器之间实现反向传值,也就是有A、B两个控制器,由A跳转到B,在由B返回到A。在由B返回的时候,这里需要的传值就叫做反向传值,也叫逆向传值。下面,就在代码
2017-03-31 11:08:03
628
原创 iOS委托代理(delegate)介绍
OC是没有多继承的,所以在很多时候,需要使用到协议(protocol)。前面有文章对协议进行了简单的介绍,这里就不多说了。这里说一下一个与协议有关的东西----委托代理(delegate)。委托代理是指给一个对象提供一个机会,对另一个对象中的变化做出反应,或者响应另一个对象的行为。它的基本思想是两个对象协同解决问题。委托代理,其实是两个部分,委托和代理,在程序中委托和代理协同处理问题。
2017-03-30 17:15:14
534
原创 iOS 通知(NSNotification)的简单使用
通知:NSNotification,是iOS开发中一种重要的设计模式,它的实质是程序内部提供的一种广播机制。把接受到的消息根据内部消息转发表,将消息转发给需要的对象。通知这种设计模式,在开发中常用来不同类之间的通信,也就是常说的页面之间的传值。当然它不仅仅只有这一种应用场景,还有一种常用场景是用来控制一些属性或者控件,使得这些属性或控件在不同情况下发生响应的变化。在我以前的一个项目中就有这样的...
2017-03-29 15:56:32
22844
1
原创 KVO键值监听机制
KVO:key-value-observing,键值监听。KVO的使用被叫做观察者设计模式,这种设计模式提供了一种机制:指定一个对象的属性,当被观察的对象属性发生变化的时候,就会发送通知作出也相应的处理。这里需要注意一点:被观察的对象属性必须实现了setter、getter方法或者使用KVC存取。KVO在实际开发中的使用:1、监听某个对象属性,当属性发生变化时,实现一些操作。2
2017-03-28 13:05:45
399
原创 KVC 键值编码
1、KVC --key-value-coding 键值编码。KVC是一种存取值得键值编码形式。既然是存取值,那么如何存取就是KVC的关键,这种形式和字典的key-value类似,只是字典是数据类型,KVC是存取对象属性。KVC的使用:创建一个Student类,在Student.h文件中声明一个name属性。在Student.m中不做任何处理。Student.h文件代码:
2017-03-27 13:43:51
312
原创 OC--NSMutableDictionary可变字典
NSMutableDictionary,作为可变字典,其中的可变和可变字符串,可变数组是一样的。NSMutableDictionary是继承自NSDictionary的,所以上一篇文章中的一些属性和方法在这里都是适用的。下面来看看NSMutableDictionary的定义和初始化。创建可变字典对象,定义并初始化:定义NSMutableDictionary对象的类方法,numItems是字
2017-03-24 13:42:26
1932
原创 OC--NSDictionary字典
NSDictionary:字典,是一种以Key:Value的形式存储数据的形式。简单来说就是使用一个标识字符串来标志一个值。在使用的时候,我们就可以直接使用标识。可以理解为一堆变量的集合。既然是集合,那么就有集合的无序性。这个和数组不同。键(key):可以为任何对象(但通常都是NSString类型的字符串),必须是单值。值(value):可以是任何对象,不能是nil。对于字典的使用,通
2017-03-21 11:26:13
879
原创 OC--NSMutableArray可变数组
NSMutableArray继承自NSArray,所以,在上一篇文章中提到的属性和方法,在这里是适用的,但是也有不同的地方,既然是可变的,可动态分配的,那么他的创建就和NSMutableString一样先要去申请内存。所以NSMutableArray的创建和初始化就应该和NSMutableString的形式相同了。而不能够适用NSArray的简化形式。说NSMutableArray之前我们先来
2017-03-20 16:53:16
1333
原创 OC--NSArray数组
数组是在开发中常用到的,它index(下标)和object(对象)对应的形式,使得它在序列化的数据展示中有很好的表现,而对于数组的处理,是数组学习的重点,很多数据的使用情况都不只是简单的拿到一个数组以后就去展示,还要有很多大量的逻辑处理。
2017-03-20 12:50:15
1032
原创 OC--NSMutableString可变字符串
NSMutableString:可变字符串,这里的可变指的是可以动态修改。当我们去看NSMutableString的时候会看到下面的一行代码:@interface NSMutableString : NSString可以看出,NSMutableString是继承自NSString的,所以,NSString的属性和方法,在这里都是适用的。但是,既然把它单独拿出来,那么,就肯定
2017-03-17 17:14:24
683
原创 OC--NSString字符串
NSString:不可变字符串,这里的不可变对应可变字符串的解释是不可以动态创建和修改。但是并不表示一个不可变字符串变量的值创建了就不变了,因为,既然叫变量,那么变量的值就是可变的,只是不可以对不可变字符串做动态操作。直接赋值式的改变字符串变量的值是可行的。比如:创建字符串变量,NSString *string = @"string";在后面的使用过程中需要修改变量的值,这时候就可以:string = @"other string";这样NSString对象发生了变化,但不是动态修改的。所以这与可不可变无关
2017-03-17 13:28:47
405
原创 OC--block
block:代码块,是将一个函数作为值赋予变量。也就是说,block在本质上和其他变量类似,只是它的值是一个函数。在使用block的时候,也就可以像使用标准函数一样,可以有参数,可以有返回值。脱字符(^)是块的语法标识。int i = 3; int(^myBlock)(int) = ^(int num){ return num *
2017-03-14 13:19:11
244
原创 OC--protocol 协议
刚开始学习那会,常有人和我说,协议就和java中的接口差不多!what fuck?java中的接口是什么东西?能不能不要这么介绍!!!一个东西还没明白呢,又来一个定义。。。。能不能好好的说协议。
2017-03-13 14:53:04
246
原创 OC--属性修饰符
关于OC中属性修饰符,基本上是开发者面试都会被问到或者笔试遇到的题目了。由此可见它的重要性。对于开发语言来说,越是基础的东西越是应该要搞得清楚明白。
2017-03-08 14:58:02
1068
原创 OC--category(类目、分类、类别)
category:在我看到的各种资料中,通常有3中翻译:类目、分类、类别。其实都是一个意思,表示对一个类的扩充。category使用的优点:可以随时给类添加方法,这种添加不需要去创建子类的,而且添加的方法可以被子类继承。使用category可以很好的将类中的方法进行分类管理。category的缺点:只能添加方法,不能添加实例变量。如果对原有类中方法覆盖,会引起super消息
2017-03-08 10:02:39
2471
原创 OC--面向对象
在前面几篇文章,大致介绍了一下C语言,因为这次的整理的目的主要还是iOS开发,所以关于C语言的知识并不多,但是也都是我在工作中使用到的,而且是需要注意的东西。以后的文章就是OC和iOS开发的文章了。好了,废话不多说,下面开始新的篇章--OC(Objective-C)。OC被翻译成类C,是扩充C的面向对象编程语言。在这里有一个面向对象的概念,在刚开始接触java的时候,被提到过面向对象,当时
2017-03-07 16:34:18
273
原创 C语言--内存管理
对于任何的操作系统来说,内存都是很宝贵的一个地方。所以,对于编程语言来说,内存管理就显得尤为重要。C语言代码在内存中运行的时候,我们大致将占用的内存分为4块区域:代码区、静态区、栈区、堆区。这4各区域,有着各自的特点,他们也存储着我们的程序在运行中的不同类型的数据。弄明白了这4个区域的数据存储特点,也就对于内存管理有了差不多的认识了。代码区:存放程序运行时的函数体的二进制代码,由操作系统进
2017-03-07 10:39:47
545
原创 C语言--结构体
结构体,是一个在C语言中允许存储不同类型数据的数据结构,和前面我们说到的数组不同,数组是存储相同类型的数据,而结构体是可以存储不同类型的数据。例如:在数组中,如果是一个int类型的数组,那么数组中的元素只能是int类型的数据。而结构体不同,在定义结构体的时候,结构体的属性可以是不同数据类型。下面我们就来定义一个结构体。struct BOOKS{ char title[50];
2017-03-06 12:59:22
314
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人