- 博客(70)
- 收藏
- 关注
原创 Swfit中 可选型,可选链,解包,隐式解包,可选绑定,操作符 as,as?,as!,?,!,??,Any 等概念解析
Swift是一门类型安全的语言。出于安全考虑,默认变量不为空。但编码中有一些方面必须考虑为空的情况,比如类型转换,只要可能为空,就可能带来大量的潜在崩溃风险。Swift的解决方式是声明可选型变量,以将不确定因素控制在可选型范围内。可选型在OC中没有类似概念,Swfit作为一门安全的编程语言,有可选型的概念。比如var age: Int? 就表明age是Int型的可选型变量(可选型是通过一个枚举实...
2018-06-01 14:19:07
622
原创 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
4620
原创 iOS中关于计时器未置空 导致内存泄漏及野指针崩溃的问题研究
我们都知道,在VC中创建计时器,并加入到runLoop中。这时候在页面消失的时候,需要人工invalid计时器,否则会造成内存泄漏。可是在实践中发现,某些情况下,计时器并不会导致内存泄漏。有点懵,经过自己测试发现如下规律。计时器分为两种初始化方法,timerWithTimeInterval:1.0 target:self selector:@selector(func) userInfo:nil ...
2018-05-28 23:48:11
909
原创 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
1470
转载 Swift OC混编种需要注意的配置情况
此类教程网上很多,找了一个详细一些的,在此备注,防丢失。https://www.jianshu.com/p/754396e7e1bd
2018-05-28 17:47:47
745
原创 swift多线程GCD常用需求总结及工具代码
先把常用的Demo放前面,方便查找,各种理论放后面。1.延迟执行 let delay = DispatchTime.now() + .seconds(10)//计算需要开始的时间 print("添加了一个10秒后执行的任务") DispatchQueue.main.asyncAfter(deadline: delay) { //...
2018-05-28 16:40:11
1216
转载 swift之构造器
由OC转Swift时,差异比较大的就是构造器的概念。尤其是类中的指定构造器,快捷构造器,有点麻烦,下面这个博客说的挺好,mark防丢失点我点我
2018-05-25 15:27:02
506
原创 swift中let究竟能否保证变量不被修改
先说结论,定长的值类型,可以保证;其他的(引用及非定长的值类型),不能保证Swift中,常用let表示静态变量,不可变得;var表示动态变量,可变的。可事实往往并没有这么简单,还要从变量内存存储方式说起。对于定长的值类型(字符串,集合类型都是变长的),如struct point,都是保存在栈中的,速度快,效率高,自动释放内存,很方便。变长的值类型,引用类型,这俩指针放在栈中间,但是具体的数据都是存...
2018-05-25 11:49:37
1425
2
转载 Code signing is required for product type 'Application' in SDK 'iOS 11.3'
最近打包工程遇到这个报错,有点懵,经百度,这哥们说的很对,在此记录。https://blog.youkuaiyun.com/Fantasy_Jun/article/details/78082359
2018-05-24 23:15:28
10297
原创 swift面向协议编程
目前swift已经进化到4.0,苹果也承诺3.0是最后一个破坏性升级的版本,也就是语法之类的基本稳定了,长远来看,swift肯定是未来发展的主流方向。相比较之前OC中面向对象变成,swift中提倡的是面向协议编程。swift中很多语法规则也体现了苹果的这一倾向。有点玄乎,说人话。设计模式,面向**变成之类的,说到底都是为了解耦,提高开发效率,可维护性等。如果之前用OC时,就通过Category将V...
2018-05-24 19:41:20
406
原创 Category实现类似成员变量效果
Category是不能添加成员变量方法的。官方没有给出明确的原因,主流的猜测可能是因为实现Category的大部分都是框架中原生的类,比如NSString,NSData之类的。如果添加了成员变量,内存必然会增大一些。但对于已编译的那么多的框架,静态库,就没法处理新的内存大小了,申请内存之类的就没法处理了。但是我们可以通过其他方式动态的实现类似于成员变量的属性方法的功能。简单说就是可以存,可以取。运...
2018-05-14 14:57:36
233
转载 进程与线程
这俩都是编程基础,特此整理,以供以后查看原文地址点这里 首先说一下线程和进程的概念:进程是处于运行过程中的程序,是系统资源分配和调度的一个独立单位,简单的理解就是用来帮程序占据一定的存储空间的。进程拥有自己独立的位置空间,在没有经过进程本身允许的情况下,其他进程不能访问改进程的地址空间。线程是进程的一部分,它是进程中用来执行任务的单位。一个进程可以拥有多个线程,但最少...
2018-05-13 15:03:59
151
原创 KVC底层实现原理
KVC,兼职编码,是OC中很常用的一种赋值/取值方法,原理也是基于Runtime运行时,动态的赋值/取值。简单来说,具体实现如下:a. setValue:forKey的搜索方式:1. 首先搜索set<Key>:方法如果成员用@property,@synthsize处理,因为@synthsize告诉编译器自动生成set<Key>:格式的setter方法,所以这种情况下会直接搜...
2018-05-12 19:14:21
2147
原创 UIView的DrawRect方法详解
UIView的DrawRect方法,简单说:用来干啥的:就是用来绘图的。如果需要在View中绘制新的一些图形,比如曲线,直线,椭圆等,都需要重写DrawRect方法才可以;什么时候调用:当View显示的时候调用(ViewWillAppear和ViewDidAppear之间)。如果View是隐藏的,也会调用的。转屏会调用,从新设置Frame时会调用;参数rect:当View的bounds 在draw...
2018-05-12 19:01:33
3705
原创 UIView,CALayer,UIWindow 的关系和区别
这是一个很常见的问题很多博客也做了解读,我也查看了一些博客,总结如下:由于继承自不同的基类,UIView和CALayer有不同的侧重点,UIView侧重于事件传递及处理,CALayer侧重于显示渲染,两者一对一对应。UIWindow继承与UIView,是一种最特殊的View,一般一个App只有一个UIWindow对象,就是在AppDelegate中MakeKeyAndVision那个。如果某个vi...
2018-05-12 16:52:20
338
原创 调试正常,打包后NSData解析出错的BUG
此BUG特别蹊跷。先介绍一下背景。需求是用http地址,去服务端取到一张图片的文件流,使用秘钥进行异或运算之后,本地展示,即可。BUG表现是,调试状态正常请求-获取NSData-解析成UIImage-展示,很正常。可是打包之后,无论是测试包还是正式包,都不能正常显示图片。由于打包后无法调试,因此排出的很麻烦,未完待续,此处留坑,稍后填...
2018-05-08 00:57:45
247
原创 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
982
转载 iOS常用性能监测工具
在进行iOS开发时,如果程序界面稍显卡顿,就需要具体定性分析一下原因,实时监测一下系统软硬件的各项参数。从原理上讲,想严格准确的监测FPS等性能参数,需要费很多的时间精力研究底层,才能保证最终检测数据准确无误,本人没那个能力,有兴趣的可以去csdn之类的大神的帖子去详细研究。本片只提供简单的,Debug使用的小工具。本着不重复造轮子的工具,特整理网上几款常见小工具。1.JPFPSStatu...
2018-04-28 23:13:04
11624
原创 UIView生命周期
UIView和UIViewController一样,也有自己的生命周期。UIView生命周期包含的常见方法UIView包含的常见方法如下:- (void)didAddSubview:(UIView *)subview;- (void)willRemoveSubview:(UIView *)subview;- (void)willMoveToSuperview:(nullable UIV...
2018-04-28 16:08:09
12549
原创 iOS事件传递及处理
https://www.jianshu.com/p/2e074db792ba以上是最详细的博客,讲的很细致,不再赘述。一下为精华补充部分UIView继承与UIResponder,UIResponder提供四个处理方法(PS:不使用父类处理,【super之类的,会拦截事件)- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *
2018-04-18 23:47:00
278
原创 闭包
闭包,closure,类似于OC中的Block,在swift中可作为参数,返回值,等各种处理通常形式: let callAdd1 : (Int,Int) -> Int = { (a:Int,b:Int) -> Int in return a+b }通常为了减少代码,不降低代码可读性,用下列格式即可。既能
2017-04-21 16:26:22
268
原创 String
//string 和 Int的相互转换 let numStr = "07d77" var n:Int = 0 if let number = Int(numStr){ n = number } print(String(n) + "jiji")
2017-04-11 18:27:27
251
原创 方法
//方法中改变变量的值,走完后接着用 func swapTwoInt( a : inout Int, b : inout Int) { let tempa = a a = b b = tempa }//可变参数 func multiParaMethod(numValue:Int...) -> Int {
2017-04-11 18:26:26
215
转载 如何删除openfire for苹果,彻底卸载!
http://blog.youkuaiyun.com/wang_shaner/article/details/8426238首先,确保你已经关掉了openfire打开终端 (在应用程序-->实用工具-->)输入以下命令sudo rm -rf /Library/PreferencePanes/Openfire.prefPanesudo rm -rf /usr/local/openfi
2016-12-21 15:47:14
522
转载 XMPP登录错误
先放结论:修改类XMPPStream.m中,注掉该类中1951-1955行代码,如下 if ([self supportsSCRAMSHA1Authentication]) { someAuth = [[XMPPSCRAMSHA1Authentication alloc] initWithStream:self password:password]; result = [
2016-12-15 00:30:23
1525
转载 iOS内购
这几天看iOS内购,有很多大神写了很多很全很细的教程,受益匪浅。整理如下:http://www.jianshu.com/p/298a01961ba7http://www.jianshu.com/p/86ac7d3b593ahttp://www.2cto.com/kf/201605/513647.htmlhttp://blog.youkuaiyun.com/she
2016-12-09 18:40:44
617
原创 iOS内存分区
http://www.tuicool.com/articles/RbA3imBhttp://www.jianshu.com/p/f3c1b920e8eb
2016-12-06 11:48:25
518
原创 CocoaPods使用
本文记录CocoaPods使用过程中的问题,从软件安装到使用安装:先mark两篇博客,安装过程大致按照这两篇博客,在终端中一步步照做即可。CocoaPods安装和使用教程--Code 4AP 2016最新CocoaPods安装和错误解决--简书其中第二篇比第一篇详细。主要是setup比较费时,也容易出错。但是我在照着第二篇安装的时候,cocoaPods一
2016-11-22 15:10:10
352
原创 KVO整理总结
关于KVO工程中用到不到,在此整理备份,以备以后使用监制观察,即让某个VC成为某个Model的某个值的观察者,当该Model的该值发生变化时,会自动通知该VC,触发相应的方法,比较方便,在某些设计模式中常用。代码如下:Model中:@interface Student : NSObject@property (nonatomic, copy) NSString * name;
2016-11-21 14:24:37
268
原创 Runtime内省机制
今天再看Runtime机制的时候,发现了自省这一东西,感觉很高大上的样子,遂仔细研究学习。没想到看完之后,发现,也不是那么难!简单说,就是类或对象,能想外界传递自身信息的一个机制。具体怎么传递呢,有以下三个方法:isKindOfClass: returns whether an object is that kind of class (inheritance included)isMemberO...
2016-11-18 15:32:32
292
转载 iOS中消息转发机制及工程应用
本文是按照博客点击打开链接学习runtime,整理备份,方便温故知新。iOS的动态性主要体现在runtime中,即在程序运行阶段可以调用任意方法,移花接木等黑科技,各种调用。关于消息机制,先补充几点:1.调用方法的本质是调用objc_msgSend函数发送消息。在发送消息途中可以任意转发,截留消息,实现上述的移花接木之类的黑科技。2.在正常情况下,如果调用的函数都是实现好的,则
2016-11-16 18:37:33
893
原创 iOS中String转URL为空问题解决
工程中,主界面下面有一个H5横条,上面有1-3个不等的按钮。点击后,后台调用本地方法,传过来url,跳转到下一webView界面。在有些情况下发现按钮消失,这是不正常的。跟代码发现H5的url已经正确传过来了,复制到浏览器中也能正常打开,这就很奇怪了,因为工程之前一直正常的,更不会出现这种问题。后来发现从后台取得Data有问题,为nil。再进一步研究,发现url都是空(不是字符串,是NSU
2016-11-11 15:20:21
5983
转载 Runtime Swizzling方法使用补充材料
原文地址,点击打开之前简单学习了Runtime中的移魂大法,swizzling,他可以将两个方法的imp指针进行对换,调用方法A,实际执行方法B,反之亦然。这个方法的使用可以看另一篇博客,很简单,就不在赘述。本片主要侧重于swizzling的一些技术细节以及对其理解,下面是对原文的整理,方便温故。这里是一些关于 Method Swizzling的讨论:Method swiz
2016-11-11 11:15:04
433
原创 Runtime结合Category给工程中所有控制器替换背景颜色
工程中控制器不少,需要全部替换背景颜色,比较麻烦,想到了Runtime这一OC黑科技。放码上来:创建UIViewController的Category,在.m文件中实现以下两个方法,在viewDidLoaded中写入想执行的代码即可。+ (void)load{ static dispatch_once_t onceToken; dispatch_once
2016-11-10 18:53:30
658
转载 NSObject的load和initialize方法
先放出处:NSObject的load和initialize方法这段时间在学习runtime的时候,他们写的Demo中看见这俩方法,但是不知道是啥调用的他俩,于是学习记录如下,PS:代码部分被我删了,有需要的移步原文。在Objective-C中,NSObject是根类,而NSObject.h的头文件中前两个方法就是load和initialize两个类方法。0. 概述
2016-11-10 18:04:52
257
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人