iOS面试
面试
Lea__DongYang
趟的坑多了
展开
-
#pragma clang diagnostic ignored 忽略警告
在开发过程中,我是比较反感这个⚠️,但是我们的开发离不开它,他能让我们注意一些可能产生错误的地方去修复。在一个阶段完成后,大家都要去处理这个警告的问题,把可能出错的地方修正。在这个过程中,可能会有一些警告,我们能够确定它不会产生影响,并且确认需要这么做的时候。我们就可以使用#pragma clang diagnostic ignored来消除警告。我...原创 2020-01-15 11:42:36 · 1727 阅读 · 0 评论 -
使用RunLoop优化TableView
最近在整理资料的时候看到了以前写的代码,在此整理下,用到的时候可以方便查看。对 RunLoop 不熟悉的可以查看下《iOS官方文档》和这篇博客《深入理解RunLoop》,讲述的淋漓尽致,相信会对你有很大的帮助。一、使用TableView时出现的问题:平时开发中绘制 tableView 时,我们使用的 cell 可能包含很多业务逻辑,比如加载网络图片、绘制内容等等。如果我们不进行优化的话,...转载 2019-12-08 02:45:16 · 546 阅读 · 0 评论 -
优化UITableViewCell高度计算的那些事
戳原文:戳我看原文我是前言这篇文章是我和我们团队最近对UITableViewCell利用AutoLayout自动高度计算和UITableView滑动优化的一个总结。我们也在维护一个开源的扩展,UITableView+FDTemplateLayoutCell,让高度计算这个事情变的前所未有的简单,也受到了很多星星的支持,github链接请戳我这篇总结你可以读到:UITa...转载 2019-12-08 02:37:08 · 219 阅读 · 0 评论 -
NSArray NSMutableArray mutableCopy copy
总结:[NSArray copy] 浅拷贝 还是那个对象[NSArray mutableCopy] 深拷贝 得到NSMutableArray[NSMutableArray copy] 深拷贝 得到 NSArray[NSMutableArray mutableCopy] 深拷贝 得到 NSMutableArray代码分析- (void)viewDidLoad { [sup...原创 2019-11-21 09:35:47 · 355 阅读 · 0 评论 -
Static关键字理解(iOS)
Static修饰局部变量:当static关键字修饰局部变量时,只会初始化一次。 例 1:@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor whiteColor]; [self tes...转载 2019-11-20 16:23:40 · 266 阅读 · 0 评论 -
swift3.0 enumerated 遍历数组 拿到下标和元素以及反向遍历
1.要遍历数组同时拿到下标值和元素,可通过元祖进行遍历1.1 定义数组一个字符串数组如下let array: [String] = ["a","b","c","d"]1.2 利用元祖进行遍历for (index,value) in array.enumerated() { print(index,value)}1.3 输出结果为0 a1...原创 2019-04-04 11:32:36 · 2144 阅读 · 0 评论 -
关于对象与内存分析
(一)OC对象在底层中的布局我们平时编写的Objective-C代码,在底层都是使用C/C++实现。即Objective-C -> C/C++ -> 汇编语言 -> 机器语言。我们定义个NSObject对象NSObject *object = [[NSObject alloc] init];使用终端命令将OC代码转换成iOS能支持的C/C++代码;xcr...转载 2019-01-16 17:53:26 · 298 阅读 · 0 评论 -
setNeedsLayout和layoutIfNeeded
解释更新布局总会重新触发layoutSubviews方法。layoutSubviews 继承于UIView的子类重写,进行布局更新,刷新视图。如果某个视图自身的bounds或者子视图的bounds发生改变,那么这个方法会在当前runloop结束的时候被调用。为什么不是立即调用呢?因为渲染毕竟比较消耗性能,特别是视图层级复杂的时候。这种机制下任何UI控件布局上的变动不会立即生效,而是每次间...转载 2018-12-18 16:54:59 · 498 阅读 · 0 评论 -
Swift 中的 var `property`
今天又发现了一个Swift愉快的codingTip:就是Swift 中的 var `property`在OC中对系统关键字的处理是比较繁琐的,被系统占用的名字是不可以使用的but,Swift只需要加一个符号`就可以搞定原创 2018-11-27 19:03:59 · 483 阅读 · 0 评论 -
iOS 中的NSLock、 NSRecursiveLock、 NSCondition
摘要:多线程编程中经常会碰到多个线程访问一个变量的问题,那么我们先来熟悉下我们跟线程相关的修饰符nonatomic和atomic一搜索,会有很多文章;但是这些文章有一个共同的特点那就是nonatomic多线程不安全和atomic多线程安全如何来判断线程安全或不安全?对于小公司在大多数项目说的简单点安全就是不报错,不安全就是报错我写了个demo验证了下@property(strong,nonatom...转载 2018-11-23 18:20:08 · 388 阅读 · 0 评论 -
iOS 获取变量属性 :修改UIAlertController样式
iOS8 之后系统把UIActionSheet和UIAlertView合并为了UIAlertController,使用就不比多说了,但在使用的过程中发现样式是固定的,点进去也未发现可以提供更改多样式的属性,所以只能使用KVC在运行时动态访问和修改对象的属性。但在使用过程中需要知道属性类型对应的key值,这里提供两个方法,是别人写好的,借用一下。//获得所有变量- (NSArray *...原创 2019-04-04 13:43:29 · 618 阅读 · 0 评论 -
loadView、viewDidLoad及viewDidUnload的关系
标题中所说的3个方法,都是UIViewController的方法,跟UIViewController的view属性的生命周期息息相关。接下来我会一一阐述它们的作用以及它们之间的联系。loadView1.什么时候被调用?每次访问UIViewController的view(比如controller.view、self.view)而且view为nil,loadView方法就会被调用。2.有...转载 2019-04-01 18:21:48 · 243 阅读 · 0 评论 -
NSURLSession htpps证书设置
NSURLSession http转Https1.设置代理NSURLSession *sesson = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[[NSOperationQueue a...转载 2019-04-09 16:34:36 · 1521 阅读 · 0 评论 -
Can't connect to local MySQL server through socket ‘/tmp/mysql.sock'
brew install mysql后一致报这个错误,然后根据网上的教程一直找mysql.sock文件,结果根本没有这个文件。然后懵逼ing折腾半天,原来是sqlsever没起来,醉了(ps:mysql.sock文件是sever起来后mysql程序自动生成的文件)安装完毕以后不应该是自动启动吗,鹅鹅鹅???废话不说,上图:SUCCESS!然后mysql_...原创 2019-07-29 17:00:09 · 303 阅读 · 0 评论 -
swift4.0 throw错误处理
对于大部分现代化面向对象的编程语言都拥有结构化的错误处理语法特性,swift也不例外。当我们在一个方法或函数中实现某些功能时,如果遇到错误的用户输入则可能导致严重的异常问题,此时我们可以选择通过抛出异常的方式,将此错误送给函数调用者。我们常用 try-catch 结构,不过在swift编程语言中没有引入专门的 try 语句块,而是直接调用之前的 do 语句块,仅仅将 try 作为抛出异常...转载 2019-07-22 18:33:15 · 1297 阅读 · 0 评论 -
iOS13 适配 附:获取DeviceToken的Swift版本
iOS 13 如期而至,虽然正式版还没出来,但是适配工作可以开展起来啦。在适配 iOS 13 过程中,遇到了如下一些问题。1. UITextField 的私有属性 _placeholderLabel 被禁止访问了遇到的第一个崩溃是修改UITextField的placeholder的颜色,历史遗留代码如下:[_textField setValue:self.placeholder...原创 2019-08-13 10:21:13 · 5440 阅读 · 0 评论 -
解决:工具链无效,app必须建立于通用版本(系统beta版本打包app)
一位朋友遇到这样的审核被拒:Invalid Toolchain. New apps and app updates must be built with the public (GM) versions.查了一些资料,先说下原因:打包时候, iTunes Connect会读取这个值,从而知道app是使用OS X预发布版本的建立的,从而拒绝。将app提交到iTunes Connect时...原创 2019-09-10 11:48:36 · 997 阅读 · 0 评论 -
Swift&iOS12 获取ssid的问题
废话不说,直接上代码: private func fetchNetInfo() -> [String : AnyObject]{ let interfaceNames = CNCopySupportedInterfaces() var SSIDInfo = [String : AnyObject]() guard int...原创 2018-10-30 14:34:25 · 683 阅读 · 0 评论 -
Swift4.0 获取类名 类名.self
今天完善夫特架子,导航里面用夫特获取类名的时候,突然很懵逼,居然木有。类(OC),只好自己研究下了,写了一个获取类名的扩展名,后来发现有个.self的方法,也尝试了下哈,看下图print(UIScreenEdgePanGestureRecognizer().ClassName)print(UIScreenEdgePanGestureRecognizer.self)print(type(o...原创 2018-10-19 17:15:36 · 5605 阅读 · 0 评论 -
iOS 性能调优,成为一名合格 iOS 程序员必须掌握
提供了基于Swift3.0模仿的新浪微博的Demo,大家可以下载看一看:基于Swift3.0高仿的微博客户端,里面针对于微博首页的复杂页面的优化做了很多的处理,页面的FPS 一直保持在59 ~ 60 。看下demo的效果: FPS测试.gifCPU 和GPU关于绘图和动画有两种处理方式CPU(中央处理器)和GPU(图形处理器),CPU的工作都在软件层面,而GPU的在硬件层面。...转载 2018-10-18 16:26:07 · 248 阅读 · 0 评论 -
iOS中__block 关键字的底层实现原理
看完这两篇基本就够了 个人觉得 希望看到的朋友 都能有所收获来自程序猿 http://www.jianshu.com/p/404ff9d3cd42来自bat大神 http://www.jianshu.com/p/e03292674e60转载 2017-08-30 16:12:24 · 379 阅读 · 0 评论 -
GCD收录3--dispatch_group线程调度组
一、简单介绍下将会用到的一些东西英语不好就不翻译官方文档了..1、dispatch_group_async Submits a block to a dispatch queue and associates the block with the given dispatch group//将一个block(代码块)加入到dispatch_queue_t queue中并和disp转载 2017-08-31 16:21:45 · 454 阅读 · 0 评论 -
js oc相互调用的三种方法
JS oc相互调用方法: 1.利用定义url调用 2.利用js直接调用 3.利用js里对象调用首先先创建UIWebView对象,加载本地html文件//加载本地html文件NSString *htmlPath = [[NSBundle mainBundle] pathForResource:@"jsbridge" ofType:@"html"];//NSString *htmlPath转载 2018-01-26 15:26:52 · 847 阅读 · 0 评论 -
iOS适配,iOS自动布局的几种高级用法(autoresizing,Masonry)
熟悉iOS开发的人,可能都知道,iOS6出来以后,autolayout自动布局就出现了,但是刚开始大家都不怎么用,直到iPhone 5s、iPhone6出来后,屏幕变得越来越多样,单纯用if来判断尺寸已完全不能满足了,自动布局才逐渐走进程序猿的编程代码中。Autolayout自动布局为什么能被大家所常用呢?可能大家都知道之前有一个自动伸缩的autoresizing属性,主要适用于一个控件和自己父控...转载 2018-03-14 09:25:50 · 1571 阅读 · 0 评论 -
Masonry使用注意篇
Github简要自动布局最重要的是约束:UI元素间关系的数学表达式。约束包括尺寸、由优先级和阈值管理的相对位置。它们是添加剂,可能导致约束冲突 、约束不足造成布局无法确定 。这两种情况都会产生异常。使用前:AutoLayout关于更新的几个方法的区别setNeedsLayout:告知页面需要更新,但是不会立刻开始更新。执行后会立刻调用layoutSubviews。layoutIfNeeded:告知...转载 2018-03-14 09:26:58 · 537 阅读 · 0 评论 -
三种Block 底层详解
Block 底层:http://www.jianshu.com/p/51d04b7639f1一:基本定义/*初步上式block定义的一些理解和解释,接下来会详解:*block名为myBlock,结合C的函数指针,myBlock为block体的指针,指向block体的入口地址*int result = myBlock(5) <==> ^(int num){return num*num}(...转载 2018-03-30 11:44:02 · 834 阅读 · 0 评论 -
iOS中 性能优化之浅谈load与initialize
一. +load源码分析[objc] view plain copyextern bool hasLoadMethods(const headerType *mhdr); extern void prepare_load_methods(const headerType *mhdr); void load_images(const charchar *path __unused, con...转载 2018-03-26 19:20:40 · 441 阅读 · 0 评论 -
OC代码混淆
闲话少说 直接进入正题 首先你要创建一个工程吧 然后打开你的终端 输入cd 然后把你的工程拖进去 回车然后 打入一下命令: touch confuse.sh 然后回车之后再输入: touch func.list 回车 就行 这时候打开你的工程 你会发现一个confuse.sh 和一个func.list文件 这时候点击addfile进去 急着 要在根目录下addfile之后点击confus...转载 2018-03-27 11:50:58 · 991 阅读 · 0 评论 -
runloop 与定时器
首先要注意 : tableview,scrollview,滑动时NSTimer的加入到run Loop中 要不然的话滑动阻碍NSTimer 运转 界面是主线程 在软件开发过程中,我们常常需要在某个时间后执行某个方法,或者是按照某个周期一直执行某个方法。在这个时候,我们就需要用到定时器。然而,在iOS中有很多方法完成以上的任务,到底有多少种方法呢?经过查阅资料,大概有三种方法:NSTimer、CAD...转载 2018-04-09 17:00:11 · 643 阅读 · 0 评论 -
(inline)内联函数在IOS开发中的使用
今天在阅读YYKit源码(https://github.com/ibireme/YYKit.git)时发现在YYKitMacro.h组件中大量使用的内联函数,例如此文件中的一个函数static inline void dispatch_async_on_main_queue(void (^block)()) { if (pthread_main_np()) { block(...转载 2018-04-03 20:10:47 · 926 阅读 · 0 评论 -
HTTP-请求头与请求体
本文从属于笔者的HTTP 理解与实践系列文章,对于HTTP的学习主要包含HTTP 基础、HTTP 请求头与请求体、HTTP 响应头与状态码、HTTP 缓存这四个部分,而对于HTTP相关的扩展与引申,我们还需要了解HTTPS 理解与实践 、HTTP/2 基础、WebSocket 基础这些部分。本部分知识点同时也归纳于笔者的我的校招准备之路:从Web前端到服务端应用架构这篇综述。HTTP Reques...转载 2018-03-29 10:56:36 · 18716 阅读 · 1 评论 -
AutoLayout相关的几个易混淆的方法
- (void)updateViewConstraints NS_AVAILABLE_IOS(6_0); UIViewController中也新增了一个更新布局约束的方法,在AutoLayoutUIView相关API的笔记中,详细讲述了UIView的一组更新布局约束的方法。 这个方法默认的实现是调用对应View的-updateConstraints 。ViewController的Vie...转载 2018-04-04 17:40:23 · 509 阅读 · 0 评论 -
UITableView 的选中状态
一、cell 在初始化或者重用时,调用 -_configureCellForDisplay:forIndexPath: 方法,这个方法会做一些附带操作,其中会调用 setSelected:animated: 方法,将 cell 的选中状态置为未选中。 1 在 tableView:cellForRowAtIndexPath: 中调用 setSelected:animated: 方法将 cell 设...转载 2018-04-04 17:42:51 · 843 阅读 · 0 评论 -
MLeaksFinder检查泄露
简介MLeaksFinder是WeRead团队开源的一个检测iOS内存泄漏的框架,其使用非常简单,只需将文件加入项目中,如果有内存泄漏,3秒后自动弹出警告来捕捉循环引用。使得可以在开发快速找到80%内存泄漏,而使用Xcode Leak工具更适合大范围的,全部的寻找泄漏点。特性通过阅读MLeaksFinder的介绍可以看出其具有以下几个特性无侵入性可以构建泄漏堆栈有白名单机制扩展性其他的一些特殊处理...转载 2018-04-12 11:52:29 · 861 阅读 · 0 评论 -
iOS的 NSHashTable和NSMapTable用法
在iOS的项目开发过程中,我们经常会使用到NSSet,NSArray,NSDictionary三个类,它们为我们设计较友好的数据结构时提供了很方便的方法先准备本文中将要使用的对象:#import <Foundation/Foundation.h>@interface HHHuman : NSObject@property (nonatomic ,strong) NSString...转载 2018-04-20 11:57:42 · 1334 阅读 · 0 评论 -
利用AutoLayout UILabel文字自动适应大小,显示不全, Autoshrink属性
相比大家会经常遇到 label 或则 textfield等显示文字的 视图时,显示不全,或者无法自动 变化长度 ,自动改变字体的 设置:今天给大家演示一下,如何 在autolayout让label 适应 不同的 宽度: 1.自动 改变字体(字体收缩):首先设置好 label 的约束,包括宽高之后,默认来看 你的 label是不变了 ,但是 当遇到 文字较多时,就会出现显...转载 2018-08-23 15:26:34 · 2748 阅读 · 0 评论 -
面试-SDWebImage原理
SDWebImage 中为 UIImageView 提供了一个分类UIImageView+WebCache.h, 这个分类中有一个最常用的接口sd_setImageWithURL:placeholderImage:,会在真实图片出现前会先显示占位图片,当真实图片被加载出来后在替换占位图片加载图片的过程大致如下:首先会在 SDWebImageCache 中寻找图片是否有对应的缓存, 它会原创 2017-08-30 16:03:17 · 609 阅读 · 0 评论