OC语言
文章平均质量分 54
梁森森
这个作者很懒,什么都没留下…
展开
-
iOS开发中使用try catch获取程序崩溃原因
背景:在开发中遇到程序崩溃是家常便饭,我们的工作就是写bug,解决bug。然而有些崩溃原因,即使我们打断点控制台中也无法输出程序崩溃原因。这时,如果我们使用try catch就可能捕获到真正的崩溃原因,并将原因告诉我们。代码: try catch可复制代码: @try { // 可能会出现崩溃的代码 ...原创 2018-05-09 17:37:42 · 1014 阅读 · 0 评论 -
iOS开发中利用MJExtension进行归档
iOS中存储数据的方式:1.NSUserDefaults2.归档3.数据库4.手动存入到沙盒5.plist文件如果我们要存储自定义的对象,那么我们就需要使用归档了。本篇博客告诉大家如何使用MJExtortion来快速地对自定义对象进行归档。1.在自定义类中写一个宏MJCodingImplementation,此宏是实现了- (id)initWithCoder:(NS原创 2018-01-22 13:36:04 · 1266 阅读 · 0 评论 -
为什么NSString要用Copy来修饰?
关于NSString要用Copy来修饰这个问题,我不多说只是摆出代码:// 深复制 Person * xiaoMing = [[Personalloc] init]; NSMutableString * name = [[NSMutableStringalloc] initWithString:@"xiaoming"];// name.原创 2016-08-25 14:28:37 · 1564 阅读 · 0 评论 -
iOS开发中时间戳和时间的相互转换
(更新时间:2018-06-01 附上demo:https://gitee.com/liangsenliangsen/time_stamp_time_classification.git demo里有为NSObject写的一个分类,该分类具有将时间戳转化为时间的功能) 由于时间戳和时间的转换并不是很常用,所以在用到的时候也只是去网上找下代码。今天发现去网上找代码还是会耗费一定时间的,于是...原创 2017-09-08 16:47:05 · 12631 阅读 · 2 评论 -
Copy mutableCopy 深拷贝、浅拷贝
Copy mutableCopy 深拷贝、浅拷贝Copy: 不管拷贝的对象是可变的还是不可变的最后得到的都是不可变的。 Copy对可变对象进行的是深拷贝,对不可变对象进行的是浅拷贝。MutableCopy:只有当拷贝的对象是可变的时候得到的才是可变的。 MutableCopy不管是对可变还是不可变对象进行的都是深拷贝。深拷贝:真正意义上的拷贝原创 2015-10-04 23:11:10 · 359 阅读 · 1 评论 -
iOS开发中上传JSON字符串到后台服务器
在之前的开发中一般上传给后台服务器的各个字段的内容都是一些字符串,而最近在一个项目中却需要上传一个JSON字符串,由于之前没上传过JSON字符串所以感觉挺新鲜,于是上网查了相关知识,并在这里记录一下。在上传JSON字符串之前首先需要获取JSON字符串,JSON字符串其实也是由OC中的某个对象转换过来的。转换思路:将某个对象先通过NSJSONSerialization转换成NSData对象,然后原创 2017-05-18 10:09:52 · 5882 阅读 · 2 评论 -
iOS开发中利用dispatch group实现并发多任务
现在有一个需求:某个页面中的数据是通过三个接口给出的,现在需要三个接口中的数据全部返回后再一起展示全部数据。需求分析:1.我们要将三个网络请求放在新开辟的子线程。 2.为了提高效率要将三个网络请求采用异步请求的方式。 3.要确保三个网络请求结束以后再进行展示数据的操作。当遇到这样的需求的时候我们可以利用GCD中的组(group)来实现。我们将每个线程操作放到组中,在所有的线程操作完成之后原创 2017-04-08 15:05:59 · 5091 阅读 · 0 评论 -
iOS开发中访问并修改一个类的私有属性
在OC中的类会有某些私有属性,这些属性通常写在.m文件中或在.h文件中用@private关键字进行修饰。某些类之所以有某些私有属性是因为不想这些属性被外界访问并修改。但我们仍能对私有属性进行访问和修改。访问以及修改私有属性有两种方式:KVC、runtime。1.KVC我们可以用setValue:的方法设置私有属性,并利用valueForKey:的方法访问私有属性。假设我们有一个类Perso原创 2017-04-10 21:42:04 · 4914 阅读 · 0 评论 -
利用runtime进行归档解档
做过iOS开发的应该都知道数据的本地化的方式,其中归档就是其中的一种。说实话,在本人在项目中并不是很常用归档来进行数据的本地存储。今天之所以写这篇博客是因为最近了解到原来我们还能利用runtime进行归档和解档。先来看一下我们之前的归档、解档代码:例如我们要对Person这个拥有name和age属性的类的某个对象进行归档,其中Person类中的代码:#import "Perso原创 2017-03-15 18:47:42 · 775 阅读 · 1 评论 -
iOS开发中利用YYModel进行归档
上篇博客说了利用MJExtension进行归档(http://blog.csdn.net/u010105969/article/details/79128051),本篇博客说说如何使用YYModel如何对自定义对象进行归档。实际代码也很简单,只需在自定义类中重写方法:(void)encodeWithCoder:(NSCoder*)aCoder {[self yy_modelEncod原创 2018-01-22 13:45:46 · 2101 阅读 · 0 评论 -
iOS开发中让UIButton上的image进行360度旋转
背景:在项目中的一个网页中有一个“换一换”按钮,点击更换页面上的书籍。在原生页面也有一个“换一换”按钮,该按钮样式和功能都和网页中的“换一换”按钮一样。两者不同的是点击网页中的“换一换”按钮,按钮上的图片会有一个360度旋转的动画效果,而原生的没有任何效果。为了统一,要求在点击原生的“换一换”按钮时,上面的图片也有一个360度动画旋转效果。代码:- (void)changeActi...原创 2018-04-10 10:52:50 · 1639 阅读 · 0 评论 -
iOS开发中图片的模糊处理
背景:产品要求对项目中的图片具有模糊处理功能。实现过程:搜索相关资料得到的几种模糊处理的图片的方法:使用vImage_Buffer (被产品否定,理由:效果不好)使用高斯模糊处理图片(被自己否定,理由:太耗CPU,CPU瞬间飙升到99%产生卡顿)使用GPUImage对图片进行模糊处理 (被自己否定,理由:太耗CPU,产生卡顿)使用网上的一个分类:UIImage+Ima...原创 2018-04-16 11:29:29 · 1041 阅读 · 1 评论 -
iOS开发中删除NSUserDefaults中所有记录
在开发中通常会使用NSUserDefaults对一些轻量级的数据进行持久性存储,在退出的时候通常会将NSUserDefaults中存储的所有数据删除。之前的做法是找到其存储的键,然后依次将存储的数据删除。可这样做会存在一些问题:1. 如果存储的数据过多的话,删除代码很多。2. 开发者稍不注意就会漏删几个数据。实际上是可以一步将NSUserDefaults中存储的数据全部删除的。代码:...原创 2018-05-09 17:36:38 · 523 阅读 · 0 评论 -
iOS 开发中Masonry和SnapKit在使用上的一些区别
居中:Masonry: masonry-X居中SnapKit:snapKit-X居中原创 2018-05-09 14:58:39 · 1457 阅读 · 0 评论 -
iOS开发中实现OC和Swift的混编
背景:最近又开始看了一些关于Swift的视频、博客、书,发现swift相对于OC使用起来更简洁了,于是就想在原有项目中引入swift。原有的项目都是使用OC写的,既然要在原有项目中引入swift文件首先就要实现OC和swift的混编设置。混编设置:在OC项目中创建一个swift文件的时候首先Xcode会弹出一个提示框:这时我们要选择“Create Bridging Head...原创 2018-04-18 17:10:08 · 7499 阅读 · 0 评论 -
iOS开发中利用UICollectionView创建文字轮播控件
背景:公司项目中有一个需求:在首页上添加一个纵向滚动的文字轮播广告。效果图: 轮播效果图 实现过程:上网搜索相关demo搜到一个demo,demo是利用UIScrollView实现的思考:既然能用UIScrollView实现为什么不用UITableView去实现呢?使用UITableView就不用考虑复用以及调整scrollView上子控件位置的问题了。手动敲代码利用U...原创 2018-04-12 13:38:16 · 660 阅读 · 0 评论 -
iOS开发中解决报错之library not found for -lAFNetworking
简书地址:https://www.jianshu.com/p/e36fe721913f原创 2018-04-04 10:39:17 · 1471 阅读 · 0 评论 -
iOS开发中解决报错之the file had a tree conflict
在开发过程中如果是多人开发,那么我们会经常commit代码、pull代码、push代码。本人之前在merge(合并)代码的时候遇到一个冲突:the file had a tree conflict背景:某个分支上的代码有问题,从master上切换到有问题代码的分支上。在分支上解决有问题的代码。将分支上的代码merge到master上。报错:the file had a tree c...原创 2018-04-04 10:10:13 · 623 阅读 · 0 评论 -
iOS开发中利用runtime为某个类的category增加属性
背景:项目中为了减少AppDelegate中的代码为AppDelegate写了一个分类,部分代码放在了该分类中。有一个功能需要发送通知,在AppDelegate中进行监听并将通知发送过来的数据进行存储(在AppDelegate的分类中实现)。由于存储的数据需要在全局进行使用,所以本人就想到了在AppDelegate中添加一个属性,将接收到的数据存储在该属性中,以供在AppDelegate的分类...原创 2018-04-16 18:24:57 · 192 阅读 · 0 评论 -
iOS开发中创建一个纵向滑动控件
先看一个效果图:https://upload-images.jianshu.io/upload_images/1154538-cb819f377dc2e3ab.gif?imageMogr2/auto-orient/strip%7CimageView2/2/w/463滑动控件 一张图胜过千言万语,一张动态图更是胜过多张图。看了动态效果图,看者也就应该猜到了本篇文章要说的大致内容了。...原创 2018-04-16 11:31:48 · 453 阅读 · 0 评论 -
iOS开发中子类指针指向父类指针
在iOS开发中我们知道父类指针可以指向子类对象,这是OC的多态。可以当我们将子类指针指向父类对象会发生什么呢?代码:LSString * str2 = [NSStringstringWithFormat:@"2"]; NSLog(@"%@", str2);LSString是继承自NSString的一个子类,当写出上面代码的时候会有一个警告:Incompatible po原创 2017-04-07 21:42:35 · 2008 阅读 · 0 评论 -
摆图片确定行数
场景:现有几张图片,要将图片摆成若干行和若干列。 图片的张数是不确定的,现在列数确定为两列,要怎么根据图片张数确定摆放的行数。代码:NSInteger count = listModel.data.count; NSInteger hNum; // 纵向个数 if (count %2 == 0) { hNum = c原创 2016-11-08 18:53:12 · 445 阅读 · 0 评论 -
完整版单例代码
#if 0+ (SingleCase *)sharedSingleCase{ // 上锁 @synchronized(self){ if (singleCase == nil) { // 几种单例写法 // singleCase = [[SingleCase all原创 2015-09-08 21:26:24 · 435 阅读 · 0 评论 -
几种单例
单例单例:Singleton pattern。就是只有一个实例,不管实例化多少个对象,对象都是唯一的(可以通过打印其地址证明)。下面就是一些单例的代码,不是很全,后面接触到新的还会继续补充。1.普通创建单例的方法:利用类方法创建单例,首先是类方法的声明(就是普通类方法的声明,不必多说)。代码:#import@interface原创 2015-09-08 21:19:28 · 311 阅读 · 0 评论 -
NSCharacterSet类在分割字符串中的应用
NSCharacterSet*set=[NSCharacterSetcharacterSetWithCharactersInString:@",!.;?"]; // 两个字符串被字符分割得到两个数组 NSArray*arr1=[str1componentsSeparatedByCharactersInSet:set];原创 2015-07-24 16:25:45 · 482 阅读 · 0 评论 -
XML解析
XML解析 Json解析节点、属性、值根节点、父节点、子节点XML解析中要用到一个类GDataXMLDocument:GDataXMLDocument*root=[[GDataXMLDocumentalloc]initWithXMLString:contentoptions:0error:nil];利用rootEleme原创 2015-07-22 21:44:57 · 367 阅读 · 0 评论 -
Block
Block查看变量的数据类型的方法:如:int* p;整型指针的变化总结:整型-》指向整型的指针1.拷贝整型的声明 int a;2.将变量名称换个名字 int q;3.给变量加一个括号 int (q);4.在变量的前面加一个*号 int (*q)原创 2015-07-22 21:38:27 · 386 阅读 · 0 评论 -
协议和代理
关键词:协议、委托、代理协议的声明有两种方式:1.单独建立一个协议(Protocol),声明在类的外部:@protocolClassBPtotocol NSObject> -(void)classBMethod; @end2.声明在类的内部。(声明在@interface的上面)声明在类的内部,当然就不用引入了, 但同样要遵循这个协议。原创 2015-07-20 22:11:40 · 424 阅读 · 0 评论 -
OC中内存管理的一些问题
关键词:局部变量放在栈中,自动释放 开辟空间 释放空间C中:char c[10]; char * p = (char *) malloc(10); //开辟的空间长度是10; p[0] = 'A'; ….. p[9] = 'G'; p[10] = 'H'; 最终的字符串p中仍包含H这个字符。开辟的虽然是10个字节的空间,但之后被定义的字符仍能输出。C中有重原创 2015-07-18 19:41:54 · 494 阅读 · 0 评论 -
iOS中的各种理论知识
Objective-C 部分1. 你如何理解OC 的内存管理OC 内存管理是基于引用计数。谁想使用某个对象B,就要把对象B 的计数器+1,如果不使用这个对象了,那么就把对象B 计数器-1,如果B 对象计数器减到0,那么B 对象自动会调用自己的 dealloc函数,也就是这个对象被销毁。一句话就是谁拥有对象,谁负责释放该对象,谁翻译 2015-09-08 21:23:55 · 360 阅读 · 0 评论 -
判断某个字符串中是否包含另一个字符串
if([@"afjlajflasjlfkajsldkfj" rangeOfString:@"kjf"].location !=NSNotFound)//_roaldSearchText { NSLog(@"yes"); } else { NSLog(@"no"); }原创 2016-07-07 20:52:54 · 831 阅读 · 0 评论 -
OC中的除法
本篇博客算是对OC基础知识的一个回顾与复习吧,内容是与除法相关的。最近在做项目的时候要用到一个百分比,可我最后得到的百分比总是0,于是我有点怀疑人生了。上代码看:CGFloat x1= 100 / 1000; CGFloat x2= (CGFloat)100 / 1000; CGFloat x3= (CGFloat)(100 / 1000);原创 2016-10-27 13:18:46 · 7573 阅读 · 0 评论 -
OC中获取一串字符串的高度(宽度确定)或宽度(高度确定)
项目中我们有时会需要根据字符串来确定UILabel的宽度或高度,如我们经常遇到的单元格自适应问题。如果是要动态知道UILabel的高度,那么我们直接利用单元格自适应高度就可以。如果我们要获取UILabel的宽度(为什么要获取UILabel的宽度?因为有时如果字符串过长那么UILabel的宽度就会相应发生变化),那么就可以利用下面的方法:CGSize size = [string sizeWit原创 2016-10-26 19:49:39 · 2724 阅读 · 0 评论 -
OC中监听所有的UITextField文字的变化
在某个页面可能有多个UITextField,而且我们需要对这些UITextField进行监听(如:注册页面,需要用户输入手机号、密码、验证码等等信息,只有所有信息都输入才可以点击注册按钮,这时就需要对注册页面的所有的UITextField进行监听,以判断注册按钮何时能点击);直接上代码: [[NSNotificationCenterdefaultCenter] addObser原创 2016-10-25 20:05:32 · 1112 阅读 · 0 评论 -
利用plist文件查看后台返回数据的数据类型
当看客看到标题的时候或许会有些疑惑,有的人甚至会鄙视写者。查看后台返回的数据类型为什么要用plist文件,这也太麻烦了吧。我既然写这篇博客,肯定是有一定的原因的,它也必然有一定的价值。接下来让写者慢慢道来(实际内容也不多)。要想看后台返回的数据类型,一般后台在给我们接口的时候都会在接口文档中标明返回的数据的数据类型(这在接口定义中我们一般都会和后台进行商量以及最后的确定)。如果有些接口后台原创 2016-11-04 14:52:56 · 642 阅读 · 0 评论 -
OC中清除缓存
// 根据路径删除文件- (void)cleanCaches:(NSString *)path{ // 利用NSFileManager实现对文件的管理 NSFileManager *fileManager = [NSFileManagerdefaultManager]; if ([fileManagerfileExistsAtPath:pa转载 2016-11-03 15:35:51 · 1974 阅读 · 0 评论 -
OC中根据文件路径获取文件大小
NSString * cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask, YES) firstObject]; NSInteger size = [selfgetSizeOfFilePath:cachePath]; // 文件大小转载 2016-11-03 15:10:24 · 1422 阅读 · 0 评论