自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Pandakingli的博客

同行十二年,不知木兰是女郎。

  • 博客(30)
  • 资源 (4)
  • 收藏
  • 关注

原创 求连续子数组最大和

题目描述: 输入一个整型数组,数组里有正数也有负数。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 求所有子数组的和的最大值。要求时间复杂度为O(n)。例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2, 因此输出为该子数组的和18。这个问题在各大公司面试中出现频率之频繁,被人引用次数之多,非一般面试题可与

2017-11-30 20:52:17 449

原创 单链表判断是否相交

判断单链表是否有环路可以参考:单链表判断环路及环路的入口typedef int DataType;//节点中数据类型typedef struct ListNode//节点数据结构{ DataType data; struct ListNode *next;} ListNode;typedef struct CheckNoode/{ int flag; ListN

2017-11-28 14:34:16 361

原创 反转单链表的方法

方法1: 将单链表储存为数组,然后按照数组的索引逆序进行反转。 比较浪费空间 时间复杂度:O(N) 空间复杂度:O(N)方法2: 使用3个指针遍历单链表,逐个链接点进行反转。 时间复杂度:O(N) 空间复杂度:O(1) ActList* ReverseList2(ActList* head) { //ActList* temp=new ActList; if

2017-11-28 11:55:43 846

原创 单链表判断环路及环路的入口

1. 遍历链表将已经遍历过的节点放在一个hash表中,如果一个节点已经存在hash表中,说明有环。 时间复杂度:O(n) 空间复杂度:O(n)2. 快慢指针时间复杂度:O(n) 空间复杂度:O(1) 使用两个指针#### 判断环的存在: 设置两个指针fast和slow,初始值都指向头,slow每次前进1步,fast每次前进2步。 链表存在环:则fast必定先进入环,而slow后进入环

2017-11-27 16:09:14 1572

原创 iOS开发- 使用fui(Find Unused Imports)扫描工程中不用的类

为了给APP提速,需要定期清理不用的类 fui(Find Unused Imports)是开源项目能很好的分析出不再使用的类,准确率非常高,唯一的问题是它处理不了动态库和静态库里提供的类,也处理不了C++的类模板。使用方法是在Terminal中cd到项目所在的目录,然后执行fui find,然后等上那么几分钟(需要好几分钟甚至需要更长的时间),就可以得到一个列表了。 由于这个工具还不是100%靠

2017-11-22 18:32:55 4464

原创 iOS开发-APP启动main()调用之前的加载过程

main()调用之前的加载过程App开始启动后,系统首先加载可执行文件(自身App的所有.o文件的集合),然后加载动态链接库dyld。 dyld是一个专门用来加载动态链接库的库。 dyld源码链接 执行从dyld开始,dyld从可执行文件的依赖开始, 递归加载所有的依赖动态链接库。 动态链接库包括: iOS 中用到的所有系统 framework 加载OC runtime方法的libobjc

2017-11-21 13:18:26 3638 2

原创 iOS开发-苹果热更新方案简介

以下是iOS app热更新的几种方案。一、动态库可以做demo用,真实使用的时候会被苹果禁止。因为 打包发到AppStore的ipa安装包 里的每个动态库 都有唯一的编码,iOS系统会进行验证,所以动态通过网络获取 新的动态库 也用不了。WWDC2014:允许使用动态库、允许第三方键盘、App Extension。 从目前来看,iOS仍然不允许进程间共享动态库,即iOS上的动态库只能是私有的,因为

2017-11-21 11:25:46 1533 2

原创 iOS开发- clang -rewrite-objc的使用

clang -rewrite-objc 的作用是把oc代码转写成c/c++代码,常用它来查看OC的底层实现。1.基本使用//使用命令行进入main.m的目录,执行下面的命令clang -rewrite-objc main.m//会产生一个main.cpp文件2.查看机器上装有的的sdkxcodebuild -showsdks iOS SDKs: iOS 11.1

2017-11-20 15:42:12 526

原创 iOS开发-RuntimeDebug运行时源码调试(macOS APP)

运行时源码-苹果官网如果只是看源码,远远不如自己造个工程进行断点调试来的清楚。 大家可以直接到我的githu上下载工程进行调试,目前RuntimeDebug_MacOSAPP分支是在MacOS APP做的。 RuntimeDebug_MacOSAPP-可以调试的运行时工程(MacOS 工程)先看看运行效果: 断点: 使用步骤: 第1步:编译的target选成objc 第2步:编译的t

2017-11-20 13:49:21 1699

原创 iOS开发-dyld环境变量

苹果官方文档链接 变量 值 说明 DYLD_PRINT_STATISTICS 1 Print launch performance statistics 打印启动时间等参数 DYLD_PRINT_SEGMENTS 1 Log segment mapping DYLD_PRINT_INITIALIZERS 1 Log image initializatio

2017-11-18 14:25:48 1317

原创 iOS开发-测量APP启动耗时

冷启动冷启动就是App被kill掉以后一切从头开始启动的过程。热启动当用户按下home键的时候,iOS的App并不会马上被kill掉,还会继续存活若干时间。理想情况下,用户点击App的图标再次回来的时候,App几乎不需要做什么,就可以还原到退出前的状态,继续为用户服务。这种持续存活的情况下启动App,称为热启动。冷启动比热启动重要苹果提供的测量启动耗时方法 在Xcode的菜单中选择Project→

2017-11-18 13:47:49 3968

原创 iOS开发-load和initialize的介绍

1.load方法load方法在这个文件被程序装载时调用。只要是在Compile Sources中出现的文件总是会被装载,这与这个类是否被用到无关,因此load方法总是在main()函数之前调用。 如果一个类实现了load方法,在调用这个方法前会首先调用父类的load方法。而且这个过程是自动完成的,并不需要我们手动实现。 如果一个类没有实现load方法,那么就不会调用它父类的load方法,这一点与

2017-11-18 12:33:06 342

原创 iOS开发-修饰代理delegate用weak还是assign?

1.对于strong:该对象强引用delegate,外界不能销毁delegate对象,会导致循环引用(Retain Cycles)2.对于assing:assign是指针赋值,不对引用计数操作,使用之后如果没有置为nil,可能就会产生野指针。@property (nonatomic, assign, readwrite) id delegate;即便delegate指向的对象销毁了,delegate

2017-11-17 15:27:50 1711

原创 iOS开发-iOS11获取定位权限失败的解决方法

6:关于iOS11定位失效的问题解决方案This app has attempted to access privacy-sensitive data without a usage description. The app’s Info.plist must contain both NSLocationAlwaysAndWhenInUseUsageDescription and NSLocati

2017-11-17 09:38:33 5081 2

原创 Git使用-从一个git仓库迁移到另外一个git仓库

1). 从原地址克隆一份裸版本库,比如原本托管于 GitHub。git clone –bare git://github.com/username/project.git –bare 创建的克隆版本库都不包含工作区,直接就是版本库的内容,这样的版本库称为裸版本库。2). 然后到新的 Git 服务器上创建一个新项目,比如 GitCafe。3). 以镜像推送的方式上传代码到 GitCafe 服务器上。

2017-11-14 12:48:21 9394 3

原创 iOS开发-NSOperation和NSOperationQueue的使用

NSOperation 是苹果公司对 GCD 的封装,完全面向对象,所以使用起来更好理解。 NSOperation 和 NSOperationQueue 分别对应 GCD 的 任务 和 队列 。操作步骤: 1.将要执行的任务封装到一个 NSOperation 对象中。 2.将此任务添加到一个 NSOperationQueue 对象中。 3.然后系统就会自动在执行任务。添加任务NSOpera

2017-11-13 17:06:37 682

原创 iOS开发-如何用GCD同步若干个异步调用?

如何用GCD同步若干个异步调用?(比如根据若干个url异步加载多张图片,然后在都下载完成后合成一张整图展示给用户)使用Dispatch Group追加block到Global Group Queue,这些block如果全部执行完毕,就会执行Main Dispatch Queue中的结束处理的block。 代码如下-(void)test{ //获取并发队列 dispatch_que

2017-11-12 16:10:59 1525

原创 iOS开发-队列和同步异步执行的结果分析

多线程中的队列有: 串行队列,并发队列,全局队列(并发),主队列(串行)。执行的方法有:同步执行和异步执行。提到多线程:pthread,NSThread,GCD,NSOperation 其中phtread是跨平台的。 GCD和NSOperation都是常用的,后者是基于前者的。两者区别: GCD的核心概念是将一个任务添加到队列,指定任务执行的方法,然后执行。 NSOperation则是直

2017-11-12 15:02:24 1660

原创 iOS开发-dispatch_sync阻塞主线程造成死锁

NSLog(@"之前 - %@", [NSThread currentThread]); dispatch_sync(dispatch_get_main_queue(), ^{ NSLog(@"sync - %@", [NSThread currentThread]); }); NSLog(@"之后 - %@", [NSThread currentThread]

2017-11-12 10:51:48 5469

原创 iOS开发-Runtime是如何实现weak属性的?

weak属性的特点: weak 表明该属性定义了一种“非拥有关系” (nonowning relationship)。 为weak属性设置新值时,设置方法既不保留新值,也不释放旧值。 同assign类似,然而在属性所指的对象释放时候,属性值也会清空(nil out)。runtime是如何实现 weak 变量的自动置nil?weak 对象会放入一个 hash 表中。 用 weak 指向的对象

2017-11-11 20:15:19 2737

原创 iOS开发-__func__的使用

由于iOS底层是GCC,所以也支持 func标识符,用于打印当前函数名,可以说是排错利器.#import "Amodel.h"@implementationAmodel+ (void) load{NSLog(@"%s", __func__);}@end打印信息:+[Amodel load]

2017-11-10 17:55:52 1458

原创 iOS开发-nil/Nil/NULL/NSNull 的使用

nil: A null pointer to an Objective-C object. ( #define nil ((id)0) ) nil 是一个对象值。Nil: A null pointer to an Objective-C class.NULL: A null pointer to anything else. ( #define NULL ((void *)0) ) NU

2017-11-10 17:13:53 369

原创 iOS开发-OC 中给 nil 发送消息会崩溃吗?为什么?

Objective-C 是以 C 语言为基础的, PC 上,在 C 语言中对空指针进行操作, 程序会由于越界访问而出现保护错进而崩溃。原因需要从源代码中寻找, 下面是 objc_msgSend 的 arm 版汇编代码片段: 在 arm 的函数调用过程中, 一般用 r0-r4 传递参数, 用 r0 传递返回值。 对应 objc_msgSend,第一个参数为 self,返回值也是 self

2017-11-10 16:24:55 1224

原创 iOS开发-关于Super的题目

下面的程序会输出什么?@implementation Son : Father - (id)init { self = [super init]; if (self) { NSLog(@”%@”, NSStringFromClass([self class])); NSLog(@”%@”, NSStringFromClass([super class])); } return se

2017-11-07 18:37:46 251

原创 iOS开发-使用Runloop实现线程保活、线程常驻

保证线程的长时间存活 在iOS开发过程中,有时一些花费时间比较长的操作阻塞主线程,导致界面卡顿,那么我们就会创建一个子线程,然后把这些花费时间比较长的操作放在子线程中来处理。可是当子线程中的任务执行完毕后,子线程就会被销毁掉。 首先,我们创建一个testThread类,继承自NSThread,然后重写dealloc 方法。@interface testThread : NSThread@end@

2017-11-07 18:02:27 8245 1

原创 iOS开发-RunLoop的退出方式

一. 三种启动RunLoop的方式通过[NSRunLoop currentRunLoop]或者CFRunLoopGetCurrent()可以获取当前线程的runloop。 启动一个runloop有以下三种方法:- (void)run; - (void)runUntilDate:(NSDate *)limitDate;- (void)runMode:(NSString *)mode beforeD

2017-11-07 17:06:08 2286

原创 iOS开发-APP启动过程

当用户点击应用图标之后,应用就开始启动。应用启动完成后,就会展示一系列的视图,和用户进行各种各样的交互(如滑动、点击)。当用户退出应用后,该应用就无法和用户进行交互。这一过程就体现了一个应用的生命周期(从启动到退出)。这里只介绍应用程序的显示部分。 在介绍应用启动过程及原理之前,先来了解一些概念以及其作用。1、UIApplication      UIApplication对象是应用程序的象征,一个

2017-11-06 16:13:54 574

原创 object_getClass与self.class的区别

object_getClass与self.class的区别object_getClass:获得的是isa的指向 self.class:当self是实例对象的时候,返回的是类对象,否则则返回自身。

2017-11-03 17:27:11 1923

原创 iOS开发-面向切面编程之 Aspects 源码解析

1、面向切面编程应用在统计上 业务逻辑和统计逻辑经常耦合在一起,一方面影响了正常的业务逻辑,同时也很容易搞乱打点逻辑,而且要查看打点情况的时候也很分散。在 web 编程时候,这种场景很早就有了很成熟的方案,也就是所谓的AOP 编程(面向切面编程),其原理也就是在不更改正常的业务处理流程的前提下,通过生成一个动态代理类,从而实现对目标对象嵌入附加的操作。在 iOS 中,要想实现相似的效果也很简单,利

2017-11-03 17:18:22 637

原创 iOS开发-UITableView在iOS11默认使用Self-Sizing造成contentSize计算问题的解决

UITableView在iOS11默认使用Self-SizingUITableView的estimatedRowHeight、estimatedSectionHeaderHeight、 estimatedSectionFooterHeight三个高度估算属性由默认的0变成了UITableViewAutomaticDimension,导致很多地方的TableView高度和contentSize出现了问

2017-11-03 10:40:09 2215 1

Xcode Instruments Help中文版

Instruments Help中文版

2018-09-21

组态王与51单片机ASCII通信

组态王与51单片机ASCII通信

2015-11-26

代码大全第二版中文版

代码大全第二版中文版

2015-11-26

C程序设计(第三版)谭浩强 真书扫描版本-清晰

C程序设计(第三版)谭浩强 真书扫描版本-清晰

2015-11-26

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除