iOS
文章平均质量分 72
我很白
这个作者很懒,什么都没留下…
展开
-
调试正常,打包后NSData解析出错的BUG
此BUG特别蹊跷。先介绍一下背景。需求是用http地址,去服务端取到一张图片的文件流,使用秘钥进行异或运算之后,本地展示,即可。BUG表现是,调试状态正常请求-获取NSData-解析成UIImage-展示,很正常。可是打包之后,无论是测试包还是正式包,都不能正常显示图片。由于打包后无法调试,因此排出的很麻烦,未完待续,此处留坑,稍后填...原创 2018-05-08 00:57:45 · 231 阅读 · 0 评论 -
iOS低版本系统启动闪退
最近工作过程中遇到一个问题,调试时9.x系统直接闪退,11.x则不会出现问题,报错如下:dyld: Library not loaded: /System/Library/Frameworks/UserNotifications.framework/UserN Reason: image not found经查询发现,原因是新版本xcode中Framework,在老版本系统中不支持,导致崩溃。解...原创 2018-05-08 00:53:13 · 946 阅读 · 0 评论 -
Category实现类似成员变量效果
Category是不能添加成员变量方法的。官方没有给出明确的原因,主流的猜测可能是因为实现Category的大部分都是框架中原生的类,比如NSString,NSData之类的。如果添加了成员变量,内存必然会增大一些。但对于已编译的那么多的框架,静态库,就没法处理新的内存大小了,申请内存之类的就没法处理了。但是我们可以通过其他方式动态的实现类似于成员变量的属性方法的功能。简单说就是可以存,可以取。运...原创 2018-05-14 14:57:36 · 206 阅读 · 0 评论 -
iOS常用性能监测工具
在进行iOS开发时,如果程序界面稍显卡顿,就需要具体定性分析一下原因,实时监测一下系统软硬件的各项参数。从原理上讲,想严格准确的监测FPS等性能参数,需要费很多的时间精力研究底层,才能保证最终检测数据准确无误,本人没那个能力,有兴趣的可以去csdn之类的大神的帖子去详细研究。本片只提供简单的,Debug使用的小工具。本着不重复造轮子的工具,特整理网上几款常见小工具。1.JPFPSStatu...转载 2018-04-28 23:13:04 · 11538 阅读 · 0 评论 -
进程与线程
这俩都是编程基础,特此整理,以供以后查看原文地址点这里 首先说一下线程和进程的概念:进程是处于运行过程中的程序,是系统资源分配和调度的一个独立单位,简单的理解就是用来帮程序占据一定的存储空间的。进程拥有自己独立的位置空间,在没有经过进程本身允许的情况下,其他进程不能访问改进程的地址空间。线程是进程的一部分,它是进程中用来执行任务的单位。一个进程可以拥有多个线程,但最少...转载 2018-05-13 15:03:59 · 124 阅读 · 0 评论 -
KVC底层实现原理
KVC,兼职编码,是OC中很常用的一种赋值/取值方法,原理也是基于Runtime运行时,动态的赋值/取值。简单来说,具体实现如下:a. setValue:forKey的搜索方式:1. 首先搜索set<Key>:方法如果成员用@property,@synthsize处理,因为@synthsize告诉编译器自动生成set<Key>:格式的setter方法,所以这种情况下会直接搜...原创 2018-05-12 19:14:21 · 2112 阅读 · 0 评论 -
UIView的DrawRect方法详解
UIView的DrawRect方法,简单说:用来干啥的:就是用来绘图的。如果需要在View中绘制新的一些图形,比如曲线,直线,椭圆等,都需要重写DrawRect方法才可以;什么时候调用:当View显示的时候调用(ViewWillAppear和ViewDidAppear之间)。如果View是隐藏的,也会调用的。转屏会调用,从新设置Frame时会调用;参数rect:当View的bounds 在draw...原创 2018-05-12 19:01:33 · 3642 阅读 · 0 评论 -
UIView,CALayer,UIWindow 的关系和区别
这是一个很常见的问题很多博客也做了解读,我也查看了一些博客,总结如下:由于继承自不同的基类,UIView和CALayer有不同的侧重点,UIView侧重于事件传递及处理,CALayer侧重于显示渲染,两者一对一对应。UIWindow继承与UIView,是一种最特殊的View,一般一个App只有一个UIWindow对象,就是在AppDelegate中MakeKeyAndVision那个。如果某个vi...原创 2018-05-12 16:52:20 · 316 阅读 · 0 评论 -
UIView生命周期
UIView和UIViewController一样,也有自己的生命周期。UIView生命周期包含的常见方法UIView包含的常见方法如下:- (void)didAddSubview:(UIView *)subview;- (void)willRemoveSubview:(UIView *)subview;- (void)willMoveToSuperview:(nullable UIV...原创 2018-04-28 16:08:09 · 12447 阅读 · 0 评论 -
iOS事件传递及处理
https://www.jianshu.com/p/2e074db792ba以上是最详细的博客,讲的很细致,不再赘述。一下为精华补充部分UIView继承与UIResponder,UIResponder提供四个处理方法(PS:不使用父类处理,【super之类的,会拦截事件)- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *原创 2018-04-18 23:47:00 · 253 阅读 · 0 评论 -
swift中let究竟能否保证变量不被修改
先说结论,定长的值类型,可以保证;其他的(引用及非定长的值类型),不能保证Swift中,常用let表示静态变量,不可变得;var表示动态变量,可变的。可事实往往并没有这么简单,还要从变量内存存储方式说起。对于定长的值类型(字符串,集合类型都是变长的),如struct point,都是保存在栈中的,速度快,效率高,自动释放内存,很方便。变长的值类型,引用类型,这俩指针放在栈中间,但是具体的数据都是存...原创 2018-05-25 11:49:37 · 1373 阅读 · 2 评论 -
Swfit中 可选型,可选链,解包,隐式解包,可选绑定,操作符 as,as?,as!,?,!,??,Any 等概念解析
Swift是一门类型安全的语言。出于安全考虑,默认变量不为空。但编码中有一些方面必须考虑为空的情况,比如类型转换,只要可能为空,就可能带来大量的潜在崩溃风险。Swift的解决方式是声明可选型变量,以将不确定因素控制在可选型范围内。可选型在OC中没有类似概念,Swfit作为一门安全的编程语言,有可选型的概念。比如var age: Int? 就表明age是Int型的可选型变量(可选型是通过一个枚举实...原创 2018-06-01 14:19:07 · 572 阅读 · 0 评论 -
Swift中Selector概念及与OC中@selector比较
首先,@selector方法选择器是OC中很常用的一个关键字,无论是计时器相应方法,通知效应方法,按钮相应方法,自省判断是否能相应某个方法,都会用到@selector,OC中常用生成@selector的格式如下:- (void)func1{}- (void)func1With:(id )obj{}//生成选择器方法如下SEL selector1 = @selector(func1);...原创 2018-05-30 18:20:16 · 4578 阅读 · 0 评论 -
swift面向协议编程
目前swift已经进化到4.0,苹果也承诺3.0是最后一个破坏性升级的版本,也就是语法之类的基本稳定了,长远来看,swift肯定是未来发展的主流方向。相比较之前OC中面向对象变成,swift中提倡的是面向协议编程。swift中很多语法规则也体现了苹果的这一倾向。有点玄乎,说人话。设计模式,面向**变成之类的,说到底都是为了解耦,提高开发效率,可维护性等。如果之前用OC时,就通过Category将V...原创 2018-05-24 19:41:20 · 379 阅读 · 0 评论 -
Code signing is required for product type 'Application' in SDK 'iOS 11.3'
最近打包工程遇到这个报错,有点懵,经百度,这哥们说的很对,在此记录。https://blog.csdn.net/Fantasy_Jun/article/details/78082359转载 2018-05-24 23:15:28 · 10269 阅读 · 0 评论 -
iOS中关于计时器未置空 导致内存泄漏及野指针崩溃的问题研究
我们都知道,在VC中创建计时器,并加入到runLoop中。这时候在页面消失的时候,需要人工invalid计时器,否则会造成内存泄漏。可是在实践中发现,某些情况下,计时器并不会导致内存泄漏。有点懵,经过自己测试发现如下规律。计时器分为两种初始化方法,timerWithTimeInterval:1.0 target:self selector:@selector(func) userInfo:nil ...原创 2018-05-28 23:48:11 · 869 阅读 · 0 评论 -
OC,Swift 获取引用计数器ReatinCount
最近调试Swift时需要用到引用计数器,找了半天,在此记录//swift中方法 let count = CFGetRetainCount(self)//swift获取方法//OC方法如下//第一种方式,KVC[obj valueForKey:@"retainCount"] //第二种方式,runTimeOBJC_EXTERN int _objc_rootRetainCoun...原创 2018-05-28 20:45:02 · 1396 阅读 · 0 评论 -
Swift OC混编种需要注意的配置情况
此类教程网上很多,找了一个详细一些的,在此备注,防丢失。https://www.jianshu.com/p/754396e7e1bd转载 2018-05-28 17:47:47 · 716 阅读 · 0 评论 -
swift多线程GCD常用需求总结及工具代码
先把常用的Demo放前面,方便查找,各种理论放后面。1.延迟执行 let delay = DispatchTime.now() + .seconds(10)//计算需要开始的时间 print("添加了一个10秒后执行的任务") DispatchQueue.main.asyncAfter(deadline: delay) { //...原创 2018-05-28 16:40:11 · 1180 阅读 · 0 评论 -
swift之构造器
由OC转Swift时,差异比较大的就是构造器的概念。尤其是类中的指定构造器,快捷构造器,有点麻烦,下面这个博客说的挺好,mark防丢失点我点我转载 2018-05-25 15:27:02 · 477 阅读 · 0 评论 -
如何删除openfire for苹果,彻底卸载!
http://blog.csdn.net/wang_shaner/article/details/8426238首先,确保你已经关掉了openfire打开终端 (在应用程序-->实用工具-->)输入以下命令sudo rm -rf /Library/PreferencePanes/Openfire.prefPanesudo rm -rf /usr/local/openfi转载 2016-12-21 15:47:14 · 506 阅读 · 0 评论 -
iOS内购
这几天看iOS内购,有很多大神写了很多很全很细的教程,受益匪浅。整理如下:http://www.jianshu.com/p/298a01961ba7http://www.jianshu.com/p/86ac7d3b593ahttp://www.2cto.com/kf/201605/513647.htmlhttp://blog.csdn.net/she转载 2016-12-09 18:40:44 · 593 阅读 · 0 评论 -
iOS内存分区
http://www.tuicool.com/articles/RbA3imBhttp://www.jianshu.com/p/f3c1b920e8eb原创 2016-12-06 11:48:25 · 497 阅读 · 0 评论 -
iOS中绝对值的处理
今天需要用到float的绝对值,abs只能用于int,故整理如下abs, fabs, fabsf分别对应整形,float ,double例如fabs(-0.856) = 0.856原创 2016-10-17 15:34:53 · 431 阅读 · 0 评论 -
自己维护的一组单线程队列
工程中有下载的部分,后期由于需求一再变更,下载的需求变得特别复杂。描述如下:1.下载前需要检校,检校可能成功也可能失败,或者需要用户登录等,是异步请求。请求封装在另一个sdk中,想改成同步请求比较费劲。2.在进行多个文件下载的时候,如果一个检校不成功,其他的文件检校默认不成功,需要从队列中去除。之前所有的文件检校全是一股脑扔到后台进行网络请求,产生了很多问题。比如一个文件检校的请求发出原创 2016-11-04 18:29:23 · 722 阅读 · 0 评论 -
为什么不能在子线程中更新UI
http://www.2cto.com/kf/201410/342890.html先放结论:1、在子线程中是不能进行UI 更新的,而可以更新的结果只是一个幻像:因为子线程代码执行完毕了,又自动进入到了主线程,执行了子线程中的UI更新的函数栈,这中间的时间非常的短,就让大家误以为分线程可以更新UI。如果子线程一直在运行,则子线程中的UI更新的函数栈 主线程无法获知,即无法更新转载 2016-11-04 00:09:08 · 4057 阅读 · 0 评论 -
iOS切图拉伸
先把MJ博客详细地址放这http://blog.csdn.net/q199109106q/article/details/8615661然后是我自己实践的总结,在此mark,方便调用; UIImage * image = [UIImage imageNamed:@"logo40.png"]; //原图尺寸为40×40,这么整能让图片从中心点拉伸 C原创 2016-11-03 17:56:58 · 450 阅读 · 0 评论 -
超长标题显示及自动消失
工程中后台返回了超长的msg,显示的时候mbp超出屏幕后自动变成。。。,不符合设计,于是自定义了个标题,在此mark一下: NSString * string = @"这是一个超长标题测试这是一个超长标题测试这是一个超长标题测试这是一个超长标题测试这是一个超长标题测试"; UIAlertController *alertController = [UIAlertControll...原创 2016-11-03 16:56:15 · 361 阅读 · 0 评论 -
iOS32位和64位的坑
在开发之前应用的时候,有一个需求是从后台请求道文件大小并显示。一时疏忽,用了int,结果数据一出,显示的是-17888...一看到这个BUG,就意识到是数据溢出导致的。于是改成了long,在iPadMini4上测试完美,于是提交测试。测试用自己的iPad4测试,结果还是-17888...,于是就懵了,经过跟代码,发现在iPad4上确实是溢出。考虑良机区别,怀疑是32位于64位区别导原创 2016-11-03 11:57:03 · 2296 阅读 · 0 评论 -
Xcode7/iOS9支持http访问
今天升级Xcode 7.0 bata发现网络访问失败。输出错误信息The resource could not be loaded because the App Transport Security policy requires the use of a secure connection.Google后查证,iOS9引入了新特性App Transport Securi原创 2016-09-05 14:43:19 · 412 阅读 · 0 评论 -
0xE8008018 iOS真机运行时错误
报错如下图有该报错后,搜索最后的报错代码,0xE8008018,可在网上找到很多处理方法。重登AppleId,重新下载pp文件,重启Xcode,删除编译文件,等等。以上方法对我通通无效。后来又去重置了pp文件,解决了这个问题。原创 2016-09-12 14:50:09 · 550 阅读 · 0 评论 -
编译正常后无法运行 process launch failed: failed to get the task for process 4186
工程运行时,一开始都已经在设备上运行了突然就报如下的错误,运行失败编译的话可以正常通过,说明不是代码或者库的问题查看了一下,可能是证书的问题,当前证书是发布证书而不是测试证书切换回正常证书,一切正常原创 2016-08-03 11:24:59 · 1487 阅读 · 0 评论 -
UIAlertController Demo
在iOS8中,alertView有所改变,简化了代码量,简单Demo如下: UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"提示" message:@"返回可能导致未保存的数据丢失,\n确定返回吗?" preferredStyle:UIAlertControllerStyleAle...原创 2016-08-03 10:50:22 · 488 阅读 · 0 评论 -
iOS调用WebService接口报错整理
今天调接口,申请短信验证码的,很简单,就一个参数,手机号,是WebService,调试过程中有很多问题,一开始用AFN进行网络请求,报错,后来用系统自带原生请求数据,一样的报错,如下如果接口是http://10.10.2.64:8010/WebService/WebPhoneCode.asmx?op=GetPhoneCode,这种样式,则会报如下错 { URL: http原创 2016-08-16 17:14:03 · 1228 阅读 · 0 评论 -
获取启动图的代码
+ (NSString *)getLaunchImageName{ NSString *viewOrientation = @"Portrait"; if (UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation])) { viewO转载 2016-08-16 10:33:24 · 472 阅读 · 0 评论 -
iOS中静态库开发调用函数BUG
今天在开发静态库的时候遇到一个很奇怪的BUG,最关键的是报错信息误导Debug,折腾了好一会;首先是A工程中有B工程,A工程中调用了B工程中某个类的实例方法,该方法返回NSTimeInterval,结果在A工程中,接受这一返回参数时老是报错,需要加 * 才行,很是郁闷,截图如下:这是所调用的B工程中的方法的实现部分,如下这是A工程中的调用部分,不加 * 就报错,如下这是A工程中的调用部分,加了 *...原创 2016-07-29 11:38:53 · 514 阅读 · 0 评论 -
Git学习日记
以此记录、总结自己学习git的点滴博文并非自己编写,而是根据其他人教程学习,此处仅用于记录学习过程,整理总结。原教程过于繁琐,而且分散成很多个章节,不方便查阅,现整理方便后期查阅资料用。长期更新。原文详见:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b0001.安装及配置git仓库Git...原创 2016-07-13 16:58:28 · 553 阅读 · 0 评论 -
FFMpeg编译报错
Undefined symbols for architecture armv7: "_OBJC_CLASS_$_SZFile", referenced from: objc-class-ref in libSZMobileSDK.a(SZVideoView.o) (maybe you meant: _OBJC_CLASS_$_SZFileManager)ld:原创 2016-07-28 17:59:46 · 880 阅读 · 0 评论 -
iOS手势 总结归纳
最近需要把项目中的播放器中的手势层重构,顺便总结了iOS的手势相关的代码。 1.单击双击共存的代码UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTap)];//双击UITapGestureRecognizer *doub...原创 2016-10-18 14:21:30 · 417 阅读 · 0 评论 -
UISlider小范围滑动不能触发抬起事件的BUG
在进行播放器开发过程中,遇到了一个问题,具体表现就是UISlider在进行小范围内滑动的时候不能正常的触发TouchUpInside和TouchUpOutside。后来抽丝剥茧查看后发现是因为slider的滑动和底层的手势有冲突,导致不能运行;解决过程:该视图继承UIGestureRecognizerDelegate,并实现以下方法- (BOOL)gestureRecognizerShouldBe...原创 2016-10-18 15:15:33 · 2134 阅读 · 0 评论