自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(194)
  • 资源 (3)
  • 收藏
  • 关注

原创 2020年阿里、字节:一套高效的iOS面试题

runtime相关(参考源码objc-runtime或objc4)结构模型1、介绍下runtime的内存模型(isa、对象、类、metaclass、结构体的存储信息等)对象:OC中的对象指向的是一个objc_object指针类型,typedef struct objc_object *id;从它的结构体中可以看出,它包括一个isa指针,指向的是这个对象的类对象,一个对象实例就是通过这个isa找到它自己的Class,而这个Class中存储的就是这个实例的方法列表、属性列表、成员变量列表等相关信息的

2020-05-26 16:01:40 1147

原创 iOS页面卡顿及性能优化思考

卡顿产生的原因在屏幕成像的过程中,CPU和GPU的职责及CPU:负责对象的创建和销毁、对象属性的调整、布局计算、文本的计算和排版、图片的格式转换和解码、图像的绘制(Core Graphics)。GPU:负责变换、合成、纹理的渲染。CPU 把计算好的数据给 GPU,GPU 来渲染,渲染后的数据放在帧缓存(缓冲区,有两块缓冲区,前帧缓存和后帧缓存,协调使用,效率高)中。然后,视频控制器...

2020-03-18 18:44:48 513

原创 玩转GitLab-CI+蒲公英可持续化全自动打包

1 gitlab-runner 安装1.1 下载执行文件# Linux x86-64sudo wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64# Linux x86sudo ...

2019-07-04 17:06:57 852

原创 Git常用命令速查表

2019-04-28 17:38:59 210

原创 *** Assertion failure in +[PLManagedObjectContext __prepareEntityPropertyLookups]问题

如题,当程序崩溃报错为:*** Assertion failure in +[PLManagedObjectContext __prepareEntityPropertyLookups], /BuildRoot/Library/Caches/com.apple.xbs/Sources/PhotoLibraryServices_Sim/MobileSlideShow-3442.11.230/Sour...

2019-04-21 21:42:28 471

原创 对程序性能的优化归纳总结

1.使用复用机制2.尽可能设置 View 为不透明3.避免臃肿的 XIB 文件4.不要阻塞主线程5.图片尺寸匹配 UIImageView ,合理使用imageNamed 和 imageWithContentsOfFile6.选择合适的容器7.启用 GZIP 数据压缩8.View 的复用和懒加载机制9、缓存 服务器的响应信息(response)。 图片。 计算值。比如...

2019-03-15 09:50:02 224

原创 Runloop应用场景

1、AutoreleasePoolApp启动后,苹果在主线程 RunLoop 里注册了两个 Observer,其回调都是 _wrapRunLoopWithAutoreleasePoolHandler()。第一个 Observer 监视的事件是 Entry(即将进入Loop),其回调内会调用 _objc_autoreleasePoolPush() 创建自动释放池。其 order 是-2147...

2019-03-15 09:44:48 284

原创 如何判断当前线程是主线程

在开发应用程序时,我们异步请求数据处理后,需要回到主线程刷新UI,一般情况下直接通过以下方式异步回到主线程: dispatch_async(dispatch_get_main_queue(), ^{ // 主线程刷新UI操作 });看过SDWebImage源码的应该看过它里面有这样一个宏:#ifndef dispatch_main_async_s...

2019-03-14 12:08:16 3419

原创 iOS主线程和主队列的区别

问题第一题(主线程只会执行主队列的任务吗?)letkey=DispatchSpecificKey()DispatchQueue.main.setSpecific(key:key,value:"main")funclog(){debugPrint("mainthread:\(Thread.isMainThread)")letvalue...

2019-03-14 12:03:02 1320

原创 对象、super、isa、class 和 SuperClass 的理解

supersuper:是编译器指示符,仅仅是一个标志,并不是指针,仅仅是标志的当前对象去调用父类的方法,本质还是当前对象调用。 super的本质:其实还是当前对象去调用,只不过让当前对象去调用父类方法, super不是父类对象,指的是父类方法。superclasssuperclass:获取方法调用者的父类classclass:获取方法调用者的类对象Q:OC中对...

2019-03-14 11:06:13 2204

原创 OC中isKindOfClass与isMemberOfClass的区别,你真理解?

先给出官方介绍 isKindOfClass:Returns a Boolean value that indicates whether the receiver is an instance of given class or an instance of any class that inherits from that class. isMemberOfClass:Retur...

2019-03-13 19:03:28 778

原创 AFNetworking与SDWebImage简单阐述

1、AFNetworking 底层原理分析AFNetworking主要是对NSURLSession和NSURLConnection(iOS9.0废弃)的封装,其中主要有以下类:1). AFHTTPRequestOperationManager:内部封装的是 NSURLConnection, 负责发送网络请求, 使用最多的一个类。(3.0废弃)2). AFHTTPSessionManager...

2019-03-13 11:46:15 263

原创 RunLoop问题简单阐述

1、什么是RunLoop? 顾名思义: 1、运行循环,在程序运行过程中循环做一些事情。 2、iOS中有2套API来访问和使用RunLoop √ Foundation:NSRunLoop √ Core Foundation:CFRunLoopRef 3、NSRunLoop和CFRunLoopRef都代表着RunLoop对象 4、NSRunLoop是基于CFRunLoopRef的一层...

2019-03-13 11:39:40 144

原创 Block的循环引用解决方案理解

Block的循环引用原理和解决方法大家都比较熟悉,此处将结合上文的介绍,介绍一种不常用的解决Block循环引用的方法和一种借助Block参数解决该问题的方法。Block循环引用原因:一个对象A有Block类型的属性,从而持有这个Block,如果Block的代码块中使用到这个对象A,或者仅仅是用用到A对象的属性,会使Block也持有A对象,导致两者互相持有,不能在作用域结束后正常释放。解决原理:对...

2019-03-13 11:35:07 1531

原创 Runtime简单问题阐述

runtime 概念Objective-C是基于 C 的,它为 C 添加了面向对象的特性。它将很多静态语言在编译和链接时期做的事放到了 runtime 运行时来处理,可以说runtime是我们 Objective-C 幕后工作者。runtime(简称运行时),是一套 纯C(C和汇编写的) 的API。而 OC 就是运行时机制,也就是在运行时候的一些机制,其中最主要的是消息机制。1、简述...

2019-03-13 11:34:38 180

原创 OC部分语法简单总结

1、一个NSObject对象占用多少内存?系统分配了16个字节给NSObject对象(通过malloc_size函数获得) 但NSObject对象内部只使用了8个字节的空间(64bit环境下,可以通过class_getInstanceSize函数获得)2、对象的isa指针指向哪里?instance对象的isa指向class对象 class对象的isa指向meta-class对象 m...

2019-03-13 10:44:58 186

原创 NSDictionary的实质和实现原理

一、NSDictionary使用原理 1.NSDictionary(字典)是使用hash表来实现key和value之间的映射和存储的,hash函数设计的好坏影响着数据的查找访问效率。 -(void)setObject:(id)anObjectforKey:(id<NSCopying>)aKey;2.Objective-C中的字典NSDictio...

2019-03-13 10:21:45 1405

原创 字典的KVC与setObject:forKey:,你了解多少?

我们在初始化一个可变字典之后,再给其添加键值对的时候可以使用字典的setObject:forKey:方法,或者使用kvc的方式。setObject:forKey:将给定的键值对添加到字典中- (void)setObject:(ObjectType)anObject forKey:(id<NSCopying>)aKey参数讲解:anObject:aKey的...

2019-03-13 09:36:09 437

原创 关于iOS 9之后通知的移除

为什么 iOS 9 之前需要手动移除观察者对象?观察者注册时,通知中心并不会对观察者对象做 retain 操作,而是对观察者对象进行unsafe_unretained 引用。什么是unsafe_unretained?因为 Cocoa 和 Cocoa Touch 中的一些类仍然还没有支持 weak 引用。所以,当我们想对这些类使用弱引用的时候,只能用unsafe_unretained来替代。...

2019-03-13 09:19:26 1543

原创 Objective-C 对象存储在堆上而不是栈上 why?

一、什么是栈对象和堆对象在Objective-C 中,对象通常是指一块有特定布局的连续内存区域。我们通常这样创建一个对象:NSObject *obj = [[NSObject alloc] init];这行代码创建了一个 NSObject 类型的指针 obj 和一个 NSObject 类型的对象,obj 指针存储在栈上,而其指向的对象则存储在堆上(简称为堆对象)。目前 Object...

2019-03-07 11:25:31 815

原创 NSTaggedPointerString,__NSCFConstantString,__NSCFString和NSString的关系?NSString为什么用copy?

​​​​问题引入:NSString都存储在堆区吗?会不会存在栈区,或者数据区呢?NSString用copy修饰还是strong修饰?NSString调用copy和mutableCopy会创建一个新的内存空间吗?NSMutableString用copy修饰会导致什么样的后果?一.各类型字符串的关系和存储方式NSString和NSMutableString相信我们平时都用过n遍了,但NSS...

2019-02-24 20:22:27 807

原创 NSTimer 循环引用分析与解决方案

NSTimer循环引用分析下面的方法可以创建计时器,并将其预先安排到当前运行循环(Run Loop)当中:+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(nullable id)userInfo repe...

2019-01-25 16:18:27 252

原创 响应链遇到手势,问题分析

手势是ios开发不可或缺的一部分,但对于ios的手势及事件相应机理大家并不知道,所以今天给大家讲一讲ios的事件相应机理首先,ios的事件传递是依靠“响应链”传递的,当传递到链的某一个链环上的对象处理了这个事件,事件就停止传递。那么响应链是神马东西?响应链是由一组UIResponder(能够响应时间的基类)组成的对象,当然有事件头和事件尾,事件从头开始传递的,挨个询问是否处理当前事件。处理...

2019-01-15 18:41:55 292

转载 Block本质

第一部分:Block本质Q:什么是Block,Block的本质是什么?block本质上也是一个OC对象,它内部也有个isa指针 block是封装了函数调用以及函数调用环境的OC对象 block是封装函数及其上下文的OC对象block底层结构图查看block源码:struct __block_impl { void *isa; int Flags; ...

2019-01-11 11:10:41 154

原创 ARC和MRC下Block的使用注意

Block1.是一段代码块,只在被调用的时候执行(类似于方法和函数)2.是一种数据类型(类似于’int’,’NSString’)3.可以定义成临时变量4.可以当做参数传递5.可以定义成属性6.是一种匿名函数(重要,只有函数体,没有函数名)7.是一个指向函数的指针(一个指针对象,block的名字就是指针的地址)8.因为block代码块的内部没有修改和访问外部的变量,所...

2019-01-11 11:06:16 451

原创 iOS Strong和Copy 理解

问题描述在定义一个类的property时候,为property选择strong还是copy特别注意和研究明白的,如果property是NSString或者NSArray及其子类的时候,最好选择使用copy属性修饰。为什么呢?这是为了防止赋值给它的是可变的数据,如果可变的数据发生了变化,那么该property也会发生变化。代码示例 首先声明了两个NSString属性,如下:@pro...

2019-01-11 10:29:45 1827 1

原创 App启动原理和启动过程

一、程序启动原理1.1、main函数中执行了一个UIApplicationMain这个函数UIApplicationMain(int argc, char *argv[], NSString *principalClassName, NSString *delegateClassName);1.2、argc、argv:直接传递给UIApplicationMain进行相关处理即可    ...

2019-01-10 14:07:41 1488

转载 树的广度优先遍历和深度优先遍历(递归非递归、Java实现)

在编程生活中,我们总会遇见树性结构,这几天刚好需要对树形结构操作,就记录下自己的操作方式以及过程。现在假设有一颗这样树,(是不是二叉树都没关系,原理都是一样的)1.广度优先遍历 英文缩写为BFS即Breadth FirstSearch。其过程检验来说是对每一层节点依次访问,访问完一层进入下一层,而且每个节点只能访问一次。对于上面的例子来说,广度优先遍历的 结果是:A,B,C,D,E,F...

2019-01-09 10:18:03 486

转载 断点续传下载原理实现

需求背景动态创建的文件下载的时候希望浏览器显示下载进度 动态创建的文件希望能够分段下载HTTP断点续传报文要实现HTTP断点续传必须要简单了解以下几个报文。Accept-Ranges 告诉客户端(浏览器..)服务器端支持断点续传 服务器端返回 Range 客户端告诉服务器端从指定的的位置/范围(这里值字节数)下载资源 客户端发出 Content-Range 服务器端告诉客户端响...

2019-01-08 18:08:20 603

原创 CALayer 和 UIView的区别和联系

UIView是iOS系统中界面元素的基础, 所有的界面元素都继承自它, UIView本身完全是由CoreAnimation来实现. 真正的绘图部分, 是由一个CALayer类来管理. UIView更像是一个CALayer的管理器, 所以访问它的与绘图和坐标相关的属性, 如frame, bounds等, 实际上都是在访问其所包含的CALayer的相关属性. 因此, 可以在所有UIView的子类上实现...

2019-01-08 15:40:10 321

原创 iOS线程间通信

什么叫做线程间通信 在1个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信 线程间通信的体现 1个线程传递数据给另1个线程   在1个线程中执行完特定任务后,转到另1个线程继续执行任务 线程间通信常用方法1. NSThread :一个线程传递数据给另一个线程- (void)performSelectorOnMainThread:(SEL)aSelector wi...

2019-01-08 15:20:06 1878

原创 UITableViewCell性能优化

在使用UITableView的时候,有的时候你会碰到Cell卡顿,图片加载慢,使得滑动cell时变得不那么流畅,这些都会影响用户体验,拉低整体app的效果。当碰到这一系列问题时,性能优化看来变得至关重要。UITableView认识UITableView最核心的思想就是UITableViewCell的重用机制。简单的理解就是:UITableView只会创建一屏幕(或一屏幕多一点)的UITab...

2019-01-08 14:57:13 646

原创 iOS 如何优化 App

App 启动时间优化优化的时候,我们将启动时间分为 pre-main 时间和 main 函数到第一个界面渲染完成时间这两个部分。1. pre-main阶段1.1. 加载应用的可执行文件 1.2. 加载动态链接库加载器dyld(dynamic loader) 1.3. dyld递归加载应用所有依赖的dylib(dynamic library 动态链接库)2. main()阶段2...

2019-01-08 10:07:34 390

转载 自旋锁 互斥锁 读写锁 递归锁

互斥锁(mutexlock):最常使用于线程同步的锁;标记用来保证在任一时刻,只能有一个线程访问该对象,同一线程多次加锁操作会造成死锁;临界区和互斥量都可用来实现此锁,通常情况下锁操作失败会将该线程睡眠等待锁释放时被唤醒自旋锁(spinlock):同样用来标记只能有一个线程访问该对象,在同一线程多次加锁操作会造成死锁;使用硬件提供的swap指令或test_and_set指令实现;同互...

2019-01-07 16:47:40 427

转载 AutoreleasePool 理解

AutoreleasePool(自动释放池)是OC中的一种内存自动回收机制,它可以延迟加入AutoreleasePool中的变量release的时机。在正常情况下,创建的变量会在超出其作用域的时候release,但是如果将变量加入AutoreleasePool,那么release将延迟执行。AutoreleasePool创建和释放App启动后,苹果在主线程 RunLoop 里注册了...

2019-01-07 16:32:07 276

转载 Category为什么不能添加属性

分类中能不能定义实例变量,为什么?答案:不能。类的内存布局在编译时期就已经确定了,category是运行时才加载的早已经确定了内存布局所以无法添加实例变量,如果添加实例变量就会破坏category的内部布局。继续追问:1:为什么说category是在运行时加载的?2:不能添加实例变量,那为什么能添加属性? 先来看看在runtime中的结构体的样子在分类转化为c++文件中可以看出_c...

2019-01-07 16:26:44 2399 1

原创 EXC_BAD_ACCESS的本质详解以及僵尸模式调试

EXC_BAD_ACCESS简单理解当你遇到由EXC_BAD_ACCESS造成的崩溃时,那就意味着你向一个已经释放的对象发送消息。这是最常见的情况。EXC_BAD_ACCESS的本质在C和Objective-C中,你一直在处理指针。指针无非是存储另一个变量的内存地址的变量。当您向一个对象发送消息时,指向该对象的指针将会被引用。这意味着,你获取了指针所指的内存地址,并访问该存储区域的值。...

2019-01-07 16:04:34 2319

原创 NSDictionary底层实现原理

NSDictionary介绍NSDictionary(字典)是使用 hash表来实现key和value之间的映射和存储的, hash函数设计的好坏影响着数据的查找访问效率。数据在hash表中分布的越均匀,其访问效率越高。而在Objective-C中,通常都是利用NSString 来作为键值,其内部使用的hash函数也是通过使用 NSString对象作为键值来保证数据的各个节点在hash表中均匀...

2019-01-07 15:42:12 1605

转载 Hash算法原理理解

一、散列的概念散列方法的主要思想是根据结点的关键码值来确定其存储地址:以关键码值K为自变量,通过一定的函数关系h(K)(称为散列函数),计算出对应的函数值来,把这个值解释为结点的存储地址,将结点存入到此存储单元中。检索时,用同样的方法计算地址,然后到相应的单元里去取要找的结点。通过散列方法可以对结点进行快速检索。散列(hash,也称“哈希”)是一种重要的存储方式,也是一种常见的检索方法。按...

2019-01-07 15:20:50 493

原创 OC 内省(反射)机制的理解

Objective-C 中基于RunTime实现的反射一、反射反射,一般表现在字符串和Class转换,字符串和内部方法转换,字符串和属性的转换(取值和赋值)。二、Objective-C中的反射OC的反射是基于其Runtime实现的。以执行某个函数为例,我们知道在OC中执行[pyPerson doSomething]函数,实质上是发送了一个消息给Runtime,然后Runti...

2019-01-07 15:00:56 1176

IOS面试题2018总结188题

IOS面试题2018总结188题

2019-01-05

extjs.ux.uploaddialog

Ext.ux.UploadDialog extjs上传文件的组件,免费下载

2009-12-29

LIN1986LIN

KKKKDFSDGSDGG

2007-07-14

空空如也

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

TA关注的人

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