![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
开发知识总结
文章平均质量分 67
dave-li
这个作者很懒,什么都没留下…
展开
-
图片编辑
https://github.com/MrZQxiao/ZQPhotoEdit转载 2020-07-01 18:39:37 · 248 阅读 · 0 评论 -
GCD中的取消任务
1.现在在iOS8之后,提交到gcd队列中的dispatch block也可取消了,只需要简单的调用dispatch_block_cancel传入想要取消的block即可(需要注意必须用dispatch_block_create创建dispatch_block_t)同样的,dispatch_block_cancel也只能取消尚未执行的任务,对正在执行的任务不起作用。dispatch_q...原创 2019-10-21 22:27:11 · 1491 阅读 · 0 评论 -
http GET 和 POST 请求的优缺点
针对iOS中的区别:1.post发送的数据更大,get后端对url长度会存在限制。2.post能发送更多的数据类型,二进制数据,get只能发送ASCII字符。3.post会比get慢一些。4.数据可见行;get放在url中,post放在在body体里面。5.数据安全性,放在body里面相对安全。Get和Post在面试中一般都会问到,一般的区别:(1)post更安全...原创 2019-01-06 12:05:18 · 834 阅读 · 3 评论 -
iOS .h .m .mm .cpp文件说明
文件区别:.h :头文件。头文件包含类,类型,函数和常数的声明。.m :源代码文件。这是典型的源代码文件扩展名,可以包含Objective-C和C代码。.mm :源代码文件。带有这种扩展名的源代码文件,除了可以包含Objective-C和C代码以外还可以包含C++代码。仅在你的Objective-C代码中确实需要使用C++类或者特性的时候才用这种扩展名.cpp:只能编译C++当...转载 2019-01-06 10:53:13 · 564 阅读 · 0 评论 -
iOS 保持界面流畅的技巧
iOS 保持界面流畅的技巧转载于:https://blog.ibireme.com/2015/11/12/smooth_user_interfaces_for_ios/原创 2018-12-25 17:06:09 · 161 阅读 · 0 评论 -
原 排序(插入、希尔、冒泡、快速、选择、堆排、归并、计数及排序性能比较和稳定性)
https://blog.csdn.net/sophia__yu/article/details/80496012 http://www.cnblogs.com/chengxiao/p/6129630.html https://blog.csdn.net/adusts/article/details/80882649转载 2019-01-04 17:48:42 · 210 阅读 · 0 评论 -
YYModel 简单解析
YYModel现在项目用来自动解析json数据转model,简单记录下原理。第一步是收集目标类的类名、元类、ivarlist、methodlist、propertylist、再递归的收集- (instancetype)initWithClass:(Class)cls { if (!cls) return nil; self = [super init]; _cls...原创 2018-12-25 15:47:11 · 782 阅读 · 0 评论 -
iOS使用dispatch_group实现分组并发网络请求
前言在实际开发中我们通常会遇到这样一种需求:某个页面加载时通过网络请求获得相应的数据,再做某些操作。有时候加载的内容需要通过好几个请求的数据组合而成,比如有两个请求A和B,我们通常为了省事,会将B请求放在A请求成功的回调中发起,在B的成功回调中将数据组合起来,这样做有明显的问题:请求如果多了,需要写许多嵌套的请求如果在除了最后一个请求前的某个请求失败了,就不会执行后面的请求,数据...转载 2018-12-23 14:43:59 · 2860 阅读 · 0 评论 -
performSelector 的使用
基础用法performSelecor响应了OC语言的动态性:延迟到运行时才绑定方法。当我们在使用以下方法时:[obj performSelector:@selector(play)];[obj performSelector:@selector(play:) withObject:@"李周"];[obj performSelector:@selector(play:with:) wi...转载 2018-12-23 12:30:55 · 704 阅读 · 0 评论 -
传指针和传指针引用的区别/指针和引用的区别(本质)
指针传递参数本质上是值传递的方式,它所传递的是一个地址值。值传递过程中,被调函数的形式参数作为被调函数的局部变量处理,即在栈中开辟了内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副本。值传递的特点是被调函数对形式参数的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值。(这里是在说实参指针本身的地址值不会变) 而在引用传递过程中,被调函数的形式参数虽然也作为局部变...转载 2019-01-06 12:33:51 · 815 阅读 · 0 评论 -
autorelease 对象可能造成的内存崩溃
dispatch_async(dispatch_get_global_queue(0, 0), ^{ for(NSInteger i = 0; i < NSIntegerMax; i++) { NSString *str = [NSString stringWithFormat:@"hello - %ld", i]; //加入autorel...原创 2019-01-06 14:45:24 · 500 阅读 · 0 评论 -
开根号的几类算法总结
首先是最基本的二分开根号,这个比较容易理解,复杂度比起下面讲的牛顿迭代法要高,更容易理解。下面给出代码:#define eps 0.00001float SqrtByDichotomy(float n){ if(n<0) { return -1.0; } else { float low,up,m...原创 2019-01-06 16:18:13 · 13536 阅读 · 2 评论 -
算法笔记——15个瓶子,4只老鼠,测试哪瓶有毒
看到今天一道算法题,就写了一下自己的思路,希望有大牛,看到这个题,能提出更好的想法,再进行交流学习,我只用了一点简单的C++ 进行实现有15个瓶子,其中最多有一瓶有毒,现在有四只老鼠,喝了有毒的水之后,第二天就会死。如何在第二天就可以判断出哪个瓶子有毒 我的想法是,因为最多有一瓶有毒,所以只有,0瓶有毒,或者其中一瓶有毒,所以是16种状态,所以用4只老鼠的喝下水的存活状态标级 '0' 或者...转载 2019-01-06 17:01:40 · 873 阅读 · 0 评论 -
iOS开发32位与64位的坑
众所周知,苹果是从iPhone 5s开始对全线移动产品使用64位架构,那么如果App需要兼容32位和64位的机型,就需要注意它们之间的区别。下面我们首先看看基本数据类型的区别:32位编译器char :1个字节char*(即指针变量): 4个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节。同理64位编译器)short int : 2个字节int: 4个字节...转载 2019-01-06 17:25:39 · 2175 阅读 · 1 评论 -
iOS - runtime如何通过selector 找到对应的 IMP 地址(分别考虑类方法和实例方法)
序言对象中有类方法和实例方法的列表,列表中记录着方法的名词、参数和实现,而selector本质就是方法名称,runtime通过这个方法名称就可以在列表中找到该方法对应的实现。struct objc_class { Class isa OBJC_ISA_AVAILABILITY;#if !__OBJC2__ Class super_class ...转载 2019-03-05 11:12:02 · 872 阅读 · 0 评论 -
ARC总结
ARC在运行时做了哪些工作? 主要是指weak关键字。weak修饰的变量能够在引用计数为0时被自动设置成nil,显然是有运行时逻辑在工作的。 为了保证向后兼容性,ARC在运行时检测到类函数中的autorelease后紧跟其后retain,此时不直接调用对象的autorelease方法,而是改为调用objc_autoreleaseReturnValue。o...转载 2019-03-05 13:49:31 · 316 阅读 · 0 评论 -
黑幕背后的Autorelease
http://blog.sunnyxx.com/2014/10/15/behind-autorelease/http://www.360doc.com/content/16/0317/14/12278201_543057958.shtml黑幕背后的Autorelease2014年10月15日我是前言Autorelease机制是iOS开发者管理对象内存的好伙伴,MRC中,调用[o...转载 2019-03-05 18:50:48 · 127 阅读 · 0 评论 -
IOS 生成包含第三方的framework 和 测试Demo
生成包含Framework和Framework测试Demo的工程包含第三方静态库生成包含第三方的静态库-ObjC,-all_load的作用转载 2019-03-29 20:47:46 · 878 阅读 · 0 评论 -
构建自己的NSZombie
http://www.cnblogs.com/DamonTang/p/4915093.html 当开启 xcode zombie 选项,发送消息到一个被 "释放了的对象" 时 ObjZomies *oz = [[ObjZomies alloc] init]; oz.name = @"obz"; NSLog(@"ObjZomies :----%...转载 2018-12-23 09:50:23 · 270 阅读 · 0 评论 -
object_getClass(obj)与[OBJ class]返回的指针不同
引言该文章与runtime相关,开始并没打算写,因为大神们写了好多runtime的文章,分析的都很全面、很深刻,再写也就是班门弄斧。但还是写了,因为我在看一个东西的时候偶尔发现了object_getClass(obj)与[OBJ class]返回的指针不同,感觉非常奇怪,因为它颠覆了我们对runtime中类结构模型的认识,后来在网上找了相关问题的答案,发现并没有,所以打算写一篇文章来和大家说说...转载 2018-12-11 20:39:01 · 307 阅读 · 0 评论 -
AOP---Aspects
1. AOP简介AOP: Aspect Oriented Programming 面向切面编程。面向切面编程(也叫面向方面):Aspect Oriented Programming(AOP),是目前软件开发中的一个热点。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。AOP是OOP的延续,是(Aspec...原创 2018-12-16 23:11:30 · 383 阅读 · 0 评论 -
iOS 底层解析weak的实现原理
参考地址---------:http://www.cocoachina.com/ios/20170328/18962.htmlweak 实现原理的概括Runtime维护了一个weak表,用于存储指向某个对象的所有weak指针。weak表其实是一个hash(哈希)表,Key是所指对象的地址,Value是weak指针的地址数组,为什么是指针的地址而不是直接是指针的数组?我认为只得到指针没法做后...转载 2018-11-24 20:04:25 · 442 阅读 · 0 评论 -
iOS objc_setAssociatedObject 关联对象
今天看了FDTemplateLayoutCell的源码,类别里面相当频繁使用了关联对象,做笔记!!!学套路主要函数:void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy);id objc_getAssociatedObject(id ob...转载 2018-11-23 10:59:20 · 533 阅读 · 0 评论 -
1.C、C++与OC
OC与C语言的区别OC里中兼容C语言的语法可以两者混合编码。 OC是面向对象的,有类,对象的概念,C语言没有C是面向过程的语言OC是C语言的超集,是扩充C的面向对象编程语言。OC的语法基本上是照搬C语言的,对象所占内存总是分配在“堆空间”中,而绝不会分配在“栈”上OC的和C++的区别:1、继承:Objective-C与不支持多重继承,而C++语言支持多重继承(从侧面可以说明多...原创 2018-11-18 13:04:33 · 587 阅读 · 0 评论 -
《招聘一个靠谱的 iOS》—参考答案
https://github.com/ChenYilong/iOSInterviewQuestions/blob/master/01%E3%80%8A%E6%8B%9B%E8%81%98%E4%B8%80%E4%B8%AA%E9%9D%A0%E8%B0%B1%E7%9A%84iOS%E3%80%8B%E9%9D%A2%E8%AF%95%E9%A2%98%E5%8F%82%E8%80%83%E7%A...转载 2018-11-22 13:22:52 · 707 阅读 · 0 评论 -
OC copy内存管理语义及 copy mutableCopy
1、几点说明说到NSCopying和NSMutableCopying协议,不得不说的就是copy和mutableCopy。如果类想要支持copy操作,则必须实现NSCopying协议,也就是说实现copyWithZone方法; 如果类想要支持mutableCopy操作,则必须实现NSMutableCopying协议,也就是说实现mutableCopyWithZone方法; iOS系统中...转载 2017-04-19 15:00:15 · 400 阅读 · 0 评论 -
[OC]之 atomic 与 nonatomic的区别
一般iOS程序中,所有属性都声明为nonatomic,默认的是atomic的。这样做的原因是:在iOS中使用同步锁的开销比较大, 这会带来性能问题。一般情况下并不要求属性必须是“原子的”,因为这并不能保证“线程安全”(thread safety),若要实现“线程安全”的操作,还需采用更为深层的锁定机制才醒。atomic 系统会在生成的setter/getter方法里添加锁,但是这个锁仅仅是保...原创 2018-11-22 09:41:00 · 670 阅读 · 0 评论 -
4.多用类型常量,少用#define预处理命令
#define ANIMATION_DURATION 0.3缺点:1)这样定义没有类型信息,使阅读代码的人难以理解其意图。2)假设此指令声明在了某个头文件中,那么所有引入这个头文件的代码,其ANIMATION_DURATION都会背替换为0.3。更好的定义方式:static const NSTimeInterval kAnimationDuration = 0.3;优点:...原创 2018-11-18 19:47:58 · 207 阅读 · 0 评论 -
3.多用字面量语法,少用与之等价的方法
使用字面量语法(literal syntax)可以缩减源代码长度,使其更易读。字面数值有时需要把整数、浮点数、布尔值封入 OC 对象中,这种情况下可以用 NSNumber 类,该类可以处理多种类型的数值。// 不用字面量,创建一个数字NSNumber *someNumber = [NSNumber numberWithInt:1];// 使用字面量NSNumber *someN...转载 2018-11-18 17:42:21 · 135 阅读 · 0 评论 -
@synthesize与@dynamic
@property有两个对应的词,一个是 @synthesize,一个是 @dynamic。如果 @synthesize和 @dynamic都没写,那么默认的就是@syntheszie var = _var; 在Xcode4.5和以后的版本中,可以省略@synthesize,编译器会自动加上setter和getter方法的实现。并且默认会去访问_age这个成员变量,如果找不到_ag...原创 2018-11-26 14:12:15 · 1354 阅读 · 0 评论 -
@public @private @protected @package
1)@public (公开的)包含@protected的作用范围;并且在有对象的前提下,任何地方都可以直接访问。(2)@protected (受保护的)只能在当前类和子类的对象方法中访问(在@interface @end之间声明的成员变量如果不做特别的说明,那么其默认是protected的)(3)@private (私有的)只能在当前类的对象方法中才能直接访问(定义在m文件中的类扩展部分...转载 2018-11-29 15:29:07 · 2386 阅读 · 0 评论 -
ios桥接 bridge
使用无缝桥接技术可以在定义于foundation框架的ob类和定义于core foundation框架中的c数据结构之间转换。__bridge NSArray * arry = @[@"1",@"",@"2",@"3",@"4"];CFArrayRef acfArry = (__bridge CFArrayRef)arry;//用以将 CF 对象转换为 OC 对象,或者 OC 对象...原创 2016-03-10 17:25:22 · 588 阅读 · 0 评论 -
iOS VirtualView框架结构
venus 简单总结起来就是用 XML 描述一个组件,用我们提供的工具编译成 .out 二进制文件,在集成了 VirtualView 的 App 里直接加载 .out 文件就可以得到一个组件,然后像使用普通 UIView 一样使用它就好了。框架解决具体问题:1.页面动态性2.提升性能,虚拟组件,减少页面层级,layer组件 先从整体上预览一下整个方案的大体结构: ...原创 2018-09-10 15:34:21 · 968 阅读 · 0 评论 -
C++中结构体与类的区别(struct与class的区别)
C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据类型的数据结构了,它已经获取了太多的功能。struct能包含成员函数吗? 能!struct能继承吗? 能!!struct能实现多态吗? 能!!! 既然这些它都能实现,那它和class还能有什么区别?最本质的一个区别就是默认的访问控制: 默认的继承访问权限struct是public的,class是...转载 2018-12-09 13:15:51 · 572 阅读 · 0 评论 -
C和C++中struct的区别是什么
C语言的struct不能有函数成员,而C++的struct可以有;C语言的struct中数据成员没有private、public和protected访问权限的设定,而C++的struct的成员有访问权限设定;C语言中的struct是没有继承关系的,而C++的struct却有丰富的继承关系。C语言中的struct是用户自定义数据类型(User Defined Type),它是没有权限设置的,它...转载 2018-12-09 13:02:34 · 589 阅读 · 0 评论 -
iOS 的锁
在 ibireme 的 不再安全的 OSSpinLock 一文中,有一张图片简单的比较了各种锁的加解锁性能:本文会按照从上至下(速度由慢至快)的顺序分析每个锁的实现原理。 1.@synchronized中传入的object的内存地址,被用作key,通过hash map对应的一个系统维护的递归锁。场景一synchronized是使用的递归mutex来做同步。例如:...原创 2018-12-08 18:18:15 · 183 阅读 · 0 评论 -
开源库怎样串行的执行一个block
1.Aspects使用自旋锁,但是自旋锁目前是不建议使用的,可以参考下篇文章:https://blog.ibireme.com/2016/01/16/spinlock_is_unsafe_in_ios/以及各种锁的比较:https://bestswifter.com/ios-lock/static void bwaspect_performLocked(dispatch_blo...原创 2018-12-08 15:44:25 · 133 阅读 · 0 评论 -
respondsToSelector和 instancesRespondToSelector
respondsToSelector 和 instancesRespondToSelector是两个常用的方法,我们经常使用 someObject respondsToSelector,但是对于它和instancesRespondToSelector之间有什么区别?总结来看:instancesRespondToSelector是类方法,用来判断当前调用类对象是否可以响应方法,也就是当前...转载 2018-12-04 19:12:01 · 648 阅读 · 0 评论 -
Objc中向一个nil对象发送消息会怎样
我们知道在 Objective-C 中给 nil 发送消息程序不会崩溃,Objective-C 是以 C 语言为基础的,PC 上,在 C 语言中对空指针进行操作,程序会由于越界访问而出现保护错进而崩溃,但是 Objective-C 中为什么不会崩溃呢?原因需要从源代码中寻找,下面是 objc_msgSend 的 arm 版汇编代码片段:在 arm 的函数调用过程中,...原创 2018-11-26 19:33:04 · 1029 阅读 · 0 评论 -
2 - 在类的头文件中尽量少引入其它的头文件
与C、C++一样,Objective-C也使用“头文件”和“实现文件”来区隔代码。用Objective-C语言编写类的标准方式:以类名做文件名,分别创建2个文件,头文件后缀.h,实现文件.m用Objective-C语言编写任何类几乎都需要引入Foundation.h,如果不在该类本身引入这个文件的话,那么就要引入与其超类所属框架相对应的"基本头文件"使用向前声明延后引入头文件时机比如存...原创 2018-11-18 17:04:26 · 199 阅读 · 0 评论