- 博客(421)
- 收藏
- 关注
原创 JS手写题(call、apply、bind、new、instanceOf、原型继承)
js中call方法可以设置this的绑定,实现代码如下:核心思路是将this指针赋值给context.fn然后通过context.fn()来执行方法,这样子就将函数的this绑定到context对象上。可以看到通过new调用的方法,this指向的是这个新创建的对象,而不是传入的context,所以this打印出来的是bindFn{}this它代表了一个函数执行上下文中的当前对象,this的值取决于函数是如何被调用的,而不是如何被定义的。【函数调用模式】由于foo是直接调用的,所以this绑定的是全局对象。
2024-08-16 17:13:39
965
原创 Promise相关知识和题型整理
代码中标注了微任务在队列中的顺利,也就是执行到微任务1的时候,微任务3才进微任务队列,这个时候前面已经有微任务2了。promise的.then或者.catch可以被调用多次,但是promise构造函数只执行一次,promise的内部状态一旦改变,并且有了一个值,后续每次.then或者.catch都会直接拿到这个值。.race():接收一组异步任务并行执行,只取第一个执行完成的异步操作的结果,其他的方法仍在执行,不过执行结果会被丢弃。中传入的都不是函数,一个是数字类型,一个是对象类型,因此发生了透传,将。
2024-08-15 17:58:22
938
原创 多线程相关知识
1.创建NSOperation的子类,通过信号量阻塞当前线程// 封装一个能支持异步操作的 Operation 类@end// 这个方法需要阻塞,等到请求回来后才能继续往下走,才能达到控制请求回来后继续往下执行下一个operation的效果}];@end2.创建一个NSOperationQueue,添加并发任务i < 5;i++) {3.创建并发任务并指定任务之间的优先级// 设置执行依赖// 前一个任务执行后再执行下一个任务,可以通过设置依赖。
2024-08-04 16:23:23
984
原创 iOS弱引用
还是重写setter通过关联对象实现弱引用,但是弱引用的实现不是通过中间对象的方式,而是通过runtime运行时重写value对象的子类的delloc方法,在这个方法中将关联对象的value设置成ni;可以看到过了b、c对象出了作用域后,a.myObject以及a.anthorObject被改成nil.背景:在面试过程中被问到如果两个对象已经发生循环引用了,该如何将他们剪断,在运行态的时候。由于这个场景比较抽象,我理解面试官是希望我通过运行时的方法和方式来解决循环引用。
2024-08-02 21:06:18
537
原创 iOS分类和扩展的区别
分类:在不改变原有类的基础上(私有类),为原有类添加方法。不可定义属性,只能定义getter和setter方法。扩展:也叫做匿名分类,为原有类添加私有变量和属性。
2024-04-13 17:20:46
335
原创 Masonry的实现原理
核心是基于NSLayoutConstraint自动布局来实现的NSLayoutConstraint如何进行约束布局?1、要实现自动布局,必须把该属性设置为NOview.translatesAutoresizingMaskIntoConstraints = NO2、然后使用 addConstraint添加约束[self.view addConstraint:[NSLayoutConstraint constraintWithItem:viewattribute:NSLayoutAttri
2020-07-07 09:27:09
1098
原创 block
在block内部如何修改block外部变量,为什么?使用__block.block不允许修改外部变量的值,这里所说的外部变量的值,指的是栈中指针的内存地址。block也是一种函数,但是block的执行并不一定发生定义的函数内,如果在block中操作的栈区的变量等于访问了野指针。__block所以起到的作用只是观察到该变量被block所持有,就将“外部变量“在栈中的内存地址放到堆中(就是拷贝一份放在堆中),进而block内部也可以修改外部变量的值。这时候block内部访问的值是这个“外部变量“在堆
2020-05-31 13:29:11
227
原创 iOS RunLoop
简介我们的应用可以在无人操作的时候休息,有事件的时候又立刻响应,因为有runloop的存在。runloop代表正在运行的循环,runloop是为线程而生,每个线程都有与之对应的runloop。主线程的runloop是默认启动的,由UIApplicationMain函数创建,对于其他线程来说,runloop默认是没有启动的。runloop内部实现runloop和mode的关系(图出自底下参考博客中,侵删)一个runloop 有多个mode 一个mode有若干个...
2020-05-31 13:02:28
228
原创 消息转发 _objc_msgForward
过程1、调用resolveInstanceMethod:方法(或resolveClassMethod:)允许用户在此时为该类动态添加实现。如果这个方法有实现,那么重新开始objc_msgSend流程(这个方法中可以调用class_addMethod进行动态方法添加)2、没有实现步骤一的动态添加方法的话,调用forwardingTargetForSelector:方法,尝试找到一个能响应该消息的对象,如果获取到,则直接把消息转发给它,否则执行步骤33、调用methodSignatureSelect
2020-05-31 11:53:28
291
原创 运行时相关
1、objc中向一个nil对象发送消息会发生什么?不起作用,但不会奔溃原因:objc是动态语言,每个方法在运行时会被动态转为消息发送,即objc_msgSend(receiver,selector)objc_class的源码定义// runtime.h(类在runtime中的定义)// http://weibo.com/luohanchenyilong/// https://github.com/ChenYilongstruct objc_class { Class is.
2020-05-24 12:45:19
155
原创 Copy相关
怎么用copy关键字?1、NSString、NSArray,NSDictionary等经常使用copy关键字,是因为它们有可变类型2、block也经常使用,因为在MRC中,方法内部的block是在栈区的,使用copy可以把它放在堆区,在ARC中写不写都行,对block使用strong和copy都是一样的,但是使用copy更好。深拷贝和浅拷贝浅拷贝就是拷贝指针,深拷贝是拷贝内容集合的浅拷贝 进行浅拷贝,会向原始的集合发送retain消息,引用计数+1,所以copy后的指针...
2020-05-24 11:57:50
300
原创 protocol 和category如何使用property?
protocol在protocol中使用property,只会生成setter和getter方法的声明。当使用的时候使用systhsize name; 自动生成getter、setter 或者手动自己添加getter、setter和实例变量category和protocol不同的是,在category的时候已经不允许在类中在加入实例变量。(编译的时候,对象的内容布局已经确定)需要借助函数objc_setAssociatedObject 和 objc_getAssociatedObject
2020-05-24 11:53:01
312
原创 iOS Runtime实现weak属性
weak的特点: 同assign一样,是一种非持有关系,不同在于当属性所指对象被释放后,属性值也会自动清空。如何实现?当你初始化一个weak变量的时候,runtime会调用objc_initweak(id * object, id value)id __weak obj1 = obj;objc_initWeak(&obj1, obj);objc_initweak-> objc_storeWeak(object, value)首先通过value去找它对应的弱引用表
2020-05-17 11:03:08
532
原创 @property相关知识点
@property有哪些属性关键字?readonly 只读 assign 单纯赋值(非对象类型使用) unsafe_unretained 同assign一样 用于ARC retain 进行对象保持操作 strong 同retain 用于ARC weak 若引用 用于ARC copy 复制对象 (生成副本进行赋值,但只适用于遵...
2020-05-05 16:01:40
353
原创 iOS事件的传递和响应
整体流程:发生触摸事件后,系统把事件交给一个由UIApplicaition管理的事件队列中(FIFO);UIApplication会从事件队列中拿出最前面的事件,并将这个事件分发下去,先给keywindow;keywindow在视图层次结构中找到一个最适合的视图来处理触摸事件,找到合适的就调用视图控件的touches方法来进行具体的事件处理。事件的传递关键是为了找到合适的view进行处理触...
2020-05-05 15:40:15
162
原创 CodeForces463C Gargari and Bishops(贪心)
CodeForces463C Gargari and Bishops(贪心)CodeForces463C题目大意:在国际象棋的棋盘上放两个主教,这个两个主教不能攻击到同一个格子,最后的得分是这两个主教的攻击的格子上的分数之和。求最大的分数。解题思路:因为攻击的范围是对角线,所以两个主教一个在黑格,一个在白格。画个图就可以发现一旦一个主教放在了黑格,那么剩下的黑格是都不能在放主...
2015-06-05 11:10:39
826
原创 CodeForces 461A Appleman and Toastman(贪心)
CodeForces 461A Appleman and Toastman(贪心)CodeForces 461A题目大意: 有两个朋友在玩游戏,游戏规则如下:每次朋友A收到一个集合的数字,那么总分便加上这个集合的数字之和。之后朋友A把这个集合的数字给朋友B,朋友B会将这个集合拆分成两个非空的集合,然后再将这两个集合一个一个的返回给A。朋友B如果收到了一个只有一个数的集合,那么便
2015-06-05 11:02:53
629
原创 CodeForces 449AJzzhu and Chocolate(贪心)
CodeForces 449AJzzhu and Chocolate(贪心)CodeForces 449A题目大意: 一块N*M的巧克力,指定K次切割,切割的要求看题目。问能否使得最小的那块巧克力的面积最大。如果不能进行K次切割输出-1.解题思路: 要使得切割后最小的巧克力的面积最大,那么尽量是朝一个方向切割是最优的。代码:#include
2015-06-05 10:56:40
686
原创 ZOJ3820 Building Fire Stations(贪心)
ZOJ3820 Building Fire Stations(贪心)ZOJ3820题目大意: 给定一棵树,希望选取两个结点做消防站,使得其余的节点到达消防站的距离最大值最小。解题思路: 二分长度,判断是否可行。 判断长度L过程中,任选一个点作为根节点,利用bfs找出最远的点,然后选择相隔L的节点作为第一个消防站,然后再以这个节点为根结点进行遍历,同样也是找出最远
2015-06-05 10:49:30
1239
原创 ZOJ3829Known Notation(贪心)
ZOJ3829Known Notation(贪心)ZOJ3829题目大意:给出一个表达式,希望将这个表达式转成合法的后缀表达式。这个表达式的空格全部丢失,因此相邻的多个字母,可以看成1个,也可以看成多个。解题思路:我们先需要判断一下数字和乘号的个数关系,如果数字不足,那么后面进行的操作自然是插入数字更好点,如果数字足够了或者是太多,那么碰到*号时如果数字不足,那么自然是将当
2015-06-05 10:39:15
596
原创 CodeForces479C Exams(贪心)
CodeForces479C Exams(贪心)CodeForces479C题目大意: 有位同学参加N门考试,他希望能够提前的结束这N门考试,所以和各门科目的老师协商了一下,换一天考试Ai,然后他又希望成绩的录入时间是非递减的,成绩的录入时间是按照科目原本的考试时间。求最后一门科目的结束时间,越早越好。解题思路: 将原本的考试时间按照时间先后排序,如果两门课在同一天
2015-06-05 10:26:41
1132
原创 CodeForces484A Bits(贪心)
CodeForces484A Bits(贪心)CodeForces484A题目大意:给出范围【A,B】,期望你给出某个数X满足X属于【A,B】,并且X转成二进制的1的个数最多。如果有多个给出最小的数。解题思路:因为需要1最多,那么我们先将每个位都放上1,如果这个数减掉了某一位的1还是超出了范围,那么就可以去掉这个1;如果去掉后发现比A小了,那么这个位置上的1是不能去掉的。直
2015-06-05 10:16:52
796
原创 CodeForces 486C Palindrome Transformation(贪心)
CodeForces 486C Palindrome Transformation(贪心)CodeForces 486C题目大意: 将一个不是回文的字符串通过最少的操作使之成为回文串。 操作,左移1位,右移1位,字母+1,字母-1,这些操作到达边界时是有循环的效果的,例如位置到达最后一位往右移动,那么就到达了第一位。解题思路: 首先需要统计一下有多少个位置是不匹
2015-06-05 10:06:58
862
原创 CodeForces 492C Vanya and Exams
CodeForces 492C Vanya and Exams CodeForces 492C题目大意: 有一位同学要参加N门科目的考试,每门科目的满分固定,现在这位同学为了拿到奖学金需要达到平均分S,这就需要它在原来的基础上对某些科目的分数进行提升,然后提升每门科目需要做Ai个测试,于是希望能够做尽量少的测试能够使得分数达到平均分。解题思路: 将所有的科目按照对应的测
2015-06-05 09:56:02
682
原创 CodeForces 490E Restoring Increasing Sequence(贪心)
CodeForces 490E Restoring Increasing Sequence(贪心)CodeForces 490E题目大意:给N个正整数,然而这些正整数中间有些数字是被‘?’遮挡住了,每个‘?’可以还原回一个数字,希望给定的这N个整数形成一个递增的序列。可以的话,给出这N个整数的序列,不行返回N0.解题思路:每个整数都在满足条件的情况下尽量的小,写了一个非递归
2015-06-05 09:50:07
890
原创 kruskal求得的生成树是最小生成树的证明
kruskal求得的生成树是最小生成树的证明给一带权连通的树一定会有至少一棵生成树,那么这些生成树中间必然会会存在至少一棵最小生成树。 假设T是用kruskal求出来的最小生成树,而U是这个图的最小生成树,如果U == T,那么证明结束。 然而如果T != U,那么至少存在一条边在T中,不在U中。那么我们希望证明T和U中所有边的权值之和是相等的。假设存在k条边存在T中不存在U中
2015-05-30 21:24:35
2069
原创 POJ2377Bad Cowtractors(最大生成树)
POJ2377Bad Cowtractors(最大生成树)POJ2377Bad Cowtractors题目大意:给一个带权无向图,求最大生成树。解题思路: 因为最小生成树按照kruskal的贪心算法是可以证明正确的,那么反向我们取最大的权值的边,然后不断的加入形成的生成树就是最大生成树。代码:#include #include using na
2015-05-30 20:55:46
663
原创 UVA125 - Numbering Paths(floyd)
UVA125 - Numbering Paths(floyd)UVA125 - Numbering Paths题目大意: 给m条有方向的边,然后要求你给出N * N的矩阵,矩阵G【i】【j】代表的是i到j之间的总路径数,如果i到j之间存在着环,那么G【i】【j】 = -1.解题思路: i到j的路径数目等于i到k乘以k到j(经过k到达的话)。用floyd可以求出i到j
2015-05-28 21:56:58
844
原创 HDU4463Outlets(最小生成树)
HDU4463Outlets(最小生成树)HDU4463Outlets题目大意: 需要新建一个mall,里面有很多的商店,希望修最短的路,使得里面的店联通,可以通过别的店间接的联通,但是有规定两家店一定要直接的联通。求在这样的条件下的最短的路径。解题思路: 最小生成树,只是前提是先要使得要求的两个结点先联通。代码:#include #inclu
2015-05-28 21:45:16
568
原创 UVA104Arbitrage(floyd最短路)
UVA104Arbitrage(floyd最短路)UVA104Arbitrage题目大意: 给你两两国家之间的汇率,要求你从任何一个国家出发,身上带着1(单位不明),然后回到这个国家时,身上的钱能够> 1.01.并且如果这样的路径有多条的话,希望的到的是最短的路径,并且还有要求你输出这个最短的路径。解题思路: 利用floyd可以求出旅游任何两个国家的可以得到的最大的
2015-05-28 21:31:55
918
原创 UVA558 - Wormholes(BellmanFord判负环)
UVA558 - Wormholes(BellmanFord判负环)UVA558 - Wormholes题目大意: 有一个教授希望利用虫洞回到过去(还是从这个虫洞出来就到达了过去),给你虫洞形成的有向图,问教授能否回到过去。解题思路: 利用BellmanFord判负环,如果不存在负环的话,那么最多经过N - 1次迭代就可以得到最短路,因为形成最短路最多N - 1个节
2015-05-28 21:08:06
823
原创 UVA10099 - The Tourist Guide(floyd + 最小值的最大化)
UVA10099 - The Tourist Guide(floyd + 最小值的最大化) UVA10099 - The Tourist Guide题目大意: 给一无向图,图上的点代表城市,边代表路,每条边上的权值代表的是这条路上的巴士的最大乘客数,作为导游,给定起点和终点,和负责的游客,问需要的最少的趟数可以将这个游客送到终点。解题思路: 路径上最小值的最大化。减少趟
2015-05-28 20:53:15
660
原创 UVA10048 - Audiophobia(Floyd,最大值的最小化)
UVA10048 - Audiophobia(Floyd,最大值的最小化)UVA10048 - Audiophobia题目大意:给定一无向图,每条边都有一个权值,现在给你起点和终点,要求你找出起点到终点途经的边的最大值,要求这个值尽量小,到不了输出no path。解题思路:在floyd过程中,就可以记录下来。G【i】【j】 = min(G【i】【j】, max(G【i】【k
2015-05-28 20:18:44
632
原创 UVA10034 - Freckles(最小生成树)
UVA10034 - Freckles(最小生成树)UVA10034 - Freckles题目大意: 给你n个雀斑的位置,每个雀斑看作一个点,问使得这个雀斑相互连通的最短的路径长度,最小生成树的问题。代码:#include #include #include using namespace std;const int maxn = 105;dou
2015-05-28 20:09:23
754
原创 UVA - 658 It’s not a Bug, it’s a Feature!(优先队列Dijkstra)
UVA - 658 It’s not a Bug, it’s a Feature!(优先队列Dijkstra)题目链接题目大意:补丁和漏洞之间的修复问题。有n种漏洞,m种补丁,接着给你m行代表的是n种补丁使用的情况。前面的n个字符表示的是补丁的使用前提,后面的n个字符表示的是补丁使用完后的漏洞状况。字符‘0’代表的是这个漏洞存不存在都没关系,‘+’代表的是这个漏洞存在或者出现, ‘-’代表
2015-03-09 10:49:08
699
原创 UVA - 10801Lift Hopping(Dijkstra)
UVA - 10801Lift Hopping(Dijkstra)题目链接题目大意:有n个电梯,每个电梯有制定停靠的楼层,如果你从一个电梯换乘另一个电梯需要等待60s。一开始你在0层,在0层的时候不需要等待。现在指定你要到的楼层,问你通过这n个电梯到达目标楼层的最快时间。解题思路:这题是最短路算法,但是不容易转化,因为你需要先处理出可以停靠的任意两个楼层之间的最短时间,然后再转换成你从
2015-03-09 10:34:16
674
原创 UVA - 567 Risk(Floyd)
UVA - 567 Risk(Floyd)题目链接题目大意:有20个城市,输入给19行,每行先给有几个数,然后接着给出这几个数,代表的是后面的城市编号和行编号(城市编号)有一条边,每条边的权值为1.接着m个查询任意两个城市之间的最短距离。解题思路:求任意两个顶点之间的距离,用floyd。代码:#include const int maxn = 21;const i
2015-03-09 10:18:21
720
原创 UVA10986 - Sending email(Dijkstra)
UVA10986 - Sending email(Dijkstra)题目链接题目大意:给n个点,m条边,还有起点和终点,问起点到终点的最短距离,不可达unreachable。解题思路:最短路问题,dijkstra算法。代码:#include #include #include #include using namespace std;using std:
2015-03-09 10:11:05
765
原创 UVA10397 - Connect the Campus(最小生成树+并查集)
UVA10397 - Connect the Campus(最小生成树)题目链接题目大意:给你n个点,然后再给你m个已经连接的边,问如何使得所有的点都相连并且新建的边长度之和最小。解题思路:最小生成树,但是有m条边是已经建好的,就将这些边的权值变成0,然后用kruskal的方法来求长度。代码:#include #include #include #include
2015-03-08 13:13:43
705
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人